Skip to content

Commit 0f5372d

Browse files
committed
followup in master for #18280 (#18302)
Closes #18302
1 parent 0a10f6d commit 0f5372d

File tree

3 files changed

+26
-32
lines changed

3 files changed

+26
-32
lines changed

Diff for: ext/pdo_firebird/firebird_driver.c

+18-24
Original file line numberDiff line numberDiff line change
@@ -599,13 +599,13 @@ static void firebird_handle_closer(pdo_dbh_t *dbh) /* {{{ */
599599
}
600600

601601
if (H->date_format) {
602-
zend_string_release_ex(H->date_format, false);
602+
pefree(H->date_format, dbh->is_persistent);
603603
}
604604
if (H->time_format) {
605-
zend_string_release_ex(H->time_format, false);
605+
pefree(H->time_format, dbh->is_persistent);
606606
}
607607
if (H->timestamp_format) {
608-
zend_string_release_ex(H->timestamp_format, false);
608+
pefree(H->timestamp_format, dbh->is_persistent);
609609
}
610610

611611
if (H->einfo.errmsg) {
@@ -1091,9 +1091,11 @@ static bool pdo_firebird_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val
10911091
return false;
10921092
}
10931093
if (H->date_format) {
1094-
zend_string_release_ex(H->date_format, false);
1094+
pefree(H->date_format, dbh->is_persistent);
1095+
H->date_format = NULL;
10951096
}
1096-
H->date_format = str;
1097+
H->date_format = pestrndup(ZSTR_VAL(str), ZSTR_LEN(str),dbh->is_persistent);
1098+
zend_string_release_ex(str, 0);
10971099
}
10981100
return true;
10991101

@@ -1104,9 +1106,11 @@ static bool pdo_firebird_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val
11041106
return false;
11051107
}
11061108
if (H->time_format) {
1107-
zend_string_release_ex(H->time_format, false);
1109+
pefree(H->time_format, dbh->is_persistent);
1110+
H->time_format = NULL;
11081111
}
1109-
H->time_format = str;
1112+
H->time_format = pestrndup(ZSTR_VAL(str), ZSTR_LEN(str),dbh->is_persistent);
1113+
zend_string_release_ex(str, 0);
11101114
}
11111115
return true;
11121116

@@ -1117,9 +1121,11 @@ static bool pdo_firebird_set_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val
11171121
return false;
11181122
}
11191123
if (H->timestamp_format) {
1120-
zend_string_release_ex(H->timestamp_format, false);
1124+
pefree(H->timestamp_format, dbh->is_persistent);
1125+
H->timestamp_format = NULL;
11211126
}
1122-
H->timestamp_format = str;
1127+
H->timestamp_format = pestrndup(ZSTR_VAL(str), ZSTR_LEN(str),dbh->is_persistent);
1128+
zend_string_release_ex(str, 0);
11231129
}
11241130
return true;
11251131

@@ -1240,27 +1246,15 @@ static int pdo_firebird_get_attribute(pdo_dbh_t *dbh, zend_long attr, zval *val)
12401246
return 1;
12411247

12421248
case PDO_FB_ATTR_DATE_FORMAT:
1243-
if (H->date_format) {
1244-
ZVAL_STR_COPY(val, H->date_format);
1245-
} else {
1246-
ZVAL_STRING(val, PDO_FB_DEF_DATE_FMT);
1247-
}
1249+
ZVAL_STRING(val, H->date_format ? H->date_format : PDO_FB_DEF_DATE_FMT);
12481250
return 1;
12491251

12501252
case PDO_FB_ATTR_TIME_FORMAT:
1251-
if (H->time_format) {
1252-
ZVAL_STR_COPY(val, H->time_format);
1253-
} else {
1254-
ZVAL_STRING(val, PDO_FB_DEF_TIME_FMT);
1255-
}
1253+
ZVAL_STRING(val, H->time_format ? H->time_format : PDO_FB_DEF_TIME_FMT);
12561254
return 1;
12571255

12581256
case PDO_FB_ATTR_TIMESTAMP_FORMAT:
1259-
if (H->timestamp_format) {
1260-
ZVAL_STR_COPY(val, H->timestamp_format);
1261-
} else {
1262-
ZVAL_STRING(val, PDO_FB_DEF_TIMESTAMP_FMT);
1263-
}
1257+
ZVAL_STRING(val, H->timestamp_format ? H->timestamp_format : PDO_FB_DEF_TIMESTAMP_FMT);
12641258
return 1;
12651259

12661260
case PDO_FB_TRANSACTION_ISOLATION_LEVEL:

Diff for: ext/pdo_firebird/firebird_statement.c

+5-5
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ static int get_formatted_time_tz(pdo_stmt_t *stmt, const ISC_TIME_TZ* timeTz, zv
9393
}
9494
time = fb_encode_time(hours, minutes, seconds, fractions);
9595
isc_decode_sql_time(&time, &t);
96-
fmt = S->H->time_format ? ZSTR_VAL(S->H->time_format) : PDO_FB_DEF_TIME_FMT;
96+
fmt = S->H->time_format ? S->H->time_format : PDO_FB_DEF_TIME_FMT;
9797

9898
size_t len = strftime(timeBuf, sizeof(timeBuf), fmt, &t);
9999
if (len == 0) {
@@ -123,7 +123,7 @@ static int get_formatted_timestamp_tz(pdo_stmt_t *stmt, const ISC_TIMESTAMP_TZ*
123123
ts.timestamp_time = fb_encode_time(hours, minutes, seconds, fractions);
124124
isc_decode_timestamp(&ts, &t);
125125

126-
fmt = S->H->timestamp_format ? ZSTR_VAL(S->H->timestamp_format) : PDO_FB_DEF_TIMESTAMP_FMT;
126+
fmt = S->H->timestamp_format ? S->H->timestamp_format : PDO_FB_DEF_TIMESTAMP_FMT;
127127

128128
size_t len = strftime(timestampBuf, sizeof(timestampBuf), fmt, &t);
129129
if (len == 0) {
@@ -546,18 +546,18 @@ static int pdo_firebird_stmt_get_col(
546546
break;
547547
case SQL_TYPE_DATE:
548548
isc_decode_sql_date((ISC_DATE*)var->sqldata, &t);
549-
fmt = S->H->date_format ? ZSTR_VAL(S->H->date_format) : PDO_FB_DEF_DATE_FMT;
549+
fmt = S->H->date_format ? S->H->date_format : PDO_FB_DEF_DATE_FMT;
550550
if (0) {
551551
case SQL_TYPE_TIME:
552552
isc_decode_sql_time((ISC_TIME*)var->sqldata, &t);
553-
fmt = S->H->time_format ? ZSTR_VAL(S->H->time_format) : PDO_FB_DEF_TIME_FMT;
553+
fmt = S->H->time_format ? S->H->time_format : PDO_FB_DEF_TIME_FMT;
554554
} else if (0) {
555555
case SQL_TIMESTAMP:
556556
{
557557
ISC_TIMESTAMP timestamp = php_get_isc_timestamp_from_sqldata(var->sqldata);
558558
isc_decode_timestamp(&timestamp, &t);
559559
}
560-
fmt = S->H->timestamp_format ? ZSTR_VAL(S->H->timestamp_format) : PDO_FB_DEF_TIMESTAMP_FMT;
560+
fmt = S->H->timestamp_format ? S->H->timestamp_format : PDO_FB_DEF_TIMESTAMP_FMT;
561561
}
562562
/* convert the timestamp into a string */
563563
char buf[80];

Diff for: ext/pdo_firebird/php_pdo_firebird_int.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,9 @@ typedef struct {
7373
zend_ulong txn_isolation_level;
7474

7575
/* date and time format strings, can be set by the set_attribute method */
76-
zend_string *date_format;
77-
zend_string *time_format;
78-
zend_string *timestamp_format;
76+
char *date_format;
77+
char *time_format;
78+
char *timestamp_format;
7979

8080
unsigned sql_dialect:2;
8181

0 commit comments

Comments
 (0)