@@ -1474,6 +1474,13 @@ PHP_FUNCTION(pg_last_notice)
1474
1474
}
1475
1475
/* }}} */
1476
1476
1477
+ static inline bool is_valid_oid_string (zend_string * oid , Oid * return_oid )
1478
+ {
1479
+ char * end_ptr ;
1480
+ * return_oid = (Oid ) strtoul (ZSTR_VAL (oid ), & end_ptr , 10 );
1481
+ return ZSTR_VAL (oid ) + ZSTR_LEN (oid ) == end_ptr ;
1482
+ }
1483
+
1477
1484
/* {{{ get_field_name */
1478
1485
static char * get_field_name (PGconn * pgsql , Oid oid , HashTable * list )
1479
1486
{
@@ -2323,10 +2330,7 @@ PHP_FUNCTION(pg_lo_create)
2323
2330
switch (Z_TYPE_P (oid )) {
2324
2331
case IS_STRING :
2325
2332
{
2326
- /* TODO: Use subroutine? */
2327
- char * end_ptr ;
2328
- wanted_oid = (Oid )strtoul (Z_STRVAL_P (oid ), & end_ptr , 10 );
2329
- if ((Z_STRVAL_P (oid )+ Z_STRLEN_P (oid )) != end_ptr ) {
2333
+ if (!is_valid_oid_string (Z_STR_P (oid ), & wanted_oid )) {
2330
2334
/* wrong integer format */
2331
2335
zend_value_error ("Invalid OID value passed" );
2332
2336
RETURN_THROWS ();
@@ -2366,19 +2370,15 @@ PHP_FUNCTION(pg_lo_unlink)
2366
2370
{
2367
2371
zval * pgsql_link = NULL ;
2368
2372
zend_long oid_long ;
2369
- char * oid_string , * end_ptr ;
2370
- size_t oid_strlen ;
2373
+ zend_string * oid_string ;
2371
2374
PGconn * pgsql ;
2372
2375
Oid oid ;
2373
2376
zend_resource * link ;
2374
2377
int argc = ZEND_NUM_ARGS ();
2375
2378
2376
2379
/* accept string type since Oid type is unsigned int */
2377
- if (zend_parse_parameters_ex (ZEND_PARSE_PARAMS_QUIET , argc ,
2378
- "rs" , & pgsql_link , & oid_string , & oid_strlen ) == SUCCESS ) {
2379
- /* TODO: Use subroutine? */
2380
- oid = (Oid )strtoul (oid_string , & end_ptr , 10 );
2381
- if ((oid_string + oid_strlen ) != end_ptr ) {
2380
+ if (zend_parse_parameters_ex (ZEND_PARSE_PARAMS_QUIET , argc , "rS" , & pgsql_link , & oid_string ) == SUCCESS ) {
2381
+ if (!is_valid_oid_string (oid_string , & oid )) {
2382
2382
/* wrong integer format */
2383
2383
zend_value_error ("Invalid OID value passed" );
2384
2384
RETURN_THROWS ();
@@ -2394,11 +2394,8 @@ PHP_FUNCTION(pg_lo_unlink)
2394
2394
oid = (Oid )oid_long ;
2395
2395
link = Z_RES_P (pgsql_link );
2396
2396
}
2397
- else if (zend_parse_parameters_ex (ZEND_PARSE_PARAMS_QUIET , argc ,
2398
- "s" , & oid_string , & oid_strlen ) == SUCCESS ) {
2399
- /* TODO: subroutine? */
2400
- oid = (Oid )strtoul (oid_string , & end_ptr , 10 );
2401
- if ((oid_string + oid_strlen ) != end_ptr ) {
2397
+ else if (zend_parse_parameters_ex (ZEND_PARSE_PARAMS_QUIET , argc , "S" , & oid_string ) == SUCCESS ) {
2398
+ if (!is_valid_oid_string (oid_string , & oid )) {
2402
2399
/* wrong integer format */
2403
2400
zend_value_error ("Invalid OID value passed" );
2404
2401
RETURN_THROWS ();
@@ -2438,8 +2435,9 @@ PHP_FUNCTION(pg_lo_open)
2438
2435
{
2439
2436
zval * pgsql_link = NULL ;
2440
2437
zend_long oid_long ;
2441
- char * oid_string , * end_ptr , * mode_string ;
2442
- size_t oid_strlen , mode_strlen ;
2438
+ zend_string * oid_string ;
2439
+ char * mode_string ;
2440
+ size_t mode_strlen ;
2443
2441
PGconn * pgsql ;
2444
2442
Oid oid ;
2445
2443
int pgsql_mode = 0 , pgsql_lofd ;
@@ -2450,10 +2448,8 @@ PHP_FUNCTION(pg_lo_open)
2450
2448
2451
2449
/* accept string type since Oid is unsigned int */
2452
2450
if (zend_parse_parameters_ex (ZEND_PARSE_PARAMS_QUIET , argc ,
2453
- "rss" , & pgsql_link , & oid_string , & oid_strlen , & mode_string , & mode_strlen ) == SUCCESS ) {
2454
- /* TODO: Use subroutine? */
2455
- oid = (Oid )strtoul (oid_string , & end_ptr , 10 );
2456
- if ((oid_string + oid_strlen ) != end_ptr ) {
2451
+ "rSs" , & pgsql_link , & oid_string , & mode_string , & mode_strlen ) == SUCCESS ) {
2452
+ if (!is_valid_oid_string (oid_string , & oid )) {
2457
2453
/* wrong integer format */
2458
2454
zend_value_error ("Invalid OID value passed" );
2459
2455
RETURN_THROWS ();
@@ -2470,10 +2466,8 @@ PHP_FUNCTION(pg_lo_open)
2470
2466
link = Z_RES_P (pgsql_link );
2471
2467
}
2472
2468
else if (zend_parse_parameters_ex (ZEND_PARSE_PARAMS_QUIET , argc ,
2473
- "ss" , & oid_string , & oid_strlen , & mode_string , & mode_strlen ) == SUCCESS ) {
2474
- /* TODO: Use subroutine? */
2475
- oid = (Oid )strtoul (oid_string , & end_ptr , 10 );
2476
- if ((oid_string + oid_strlen ) != end_ptr ) {
2469
+ "Ss" , & oid_string , & mode_string , & mode_strlen ) == SUCCESS ) {
2470
+ if (!is_valid_oid_string (oid_string , & oid )) {
2477
2471
/* wrong integer format */
2478
2472
zend_value_error ("Invalid OID value passed" );
2479
2473
RETURN_THROWS ();
@@ -2723,10 +2717,7 @@ PHP_FUNCTION(pg_lo_import)
2723
2717
switch (Z_TYPE_P (oid )) {
2724
2718
case IS_STRING :
2725
2719
{
2726
- /* TODO: Use subroutine? */
2727
- char * end_ptr ;
2728
- wanted_oid = (Oid )strtoul (Z_STRVAL_P (oid ), & end_ptr , 10 );
2729
- if ((Z_STRVAL_P (oid )+ Z_STRLEN_P (oid )) != end_ptr ) {
2720
+ if (!is_valid_oid_string (Z_STR_P (oid ), & wanted_oid )) {
2730
2721
/* wrong integer format */
2731
2722
zend_value_error ("Invalid OID value passed" );
2732
2723
RETURN_THROWS ();
@@ -2767,8 +2758,8 @@ PHP_FUNCTION(pg_lo_import)
2767
2758
PHP_FUNCTION (pg_lo_export )
2768
2759
{
2769
2760
zval * pgsql_link = NULL ;
2770
- char * file_out , * oid_string , * end_ptr ;
2771
- size_t oid_strlen ;
2761
+ zend_string * oid_string ;
2762
+ char * file_out ;
2772
2763
size_t name_len ;
2773
2764
zend_long oid_long ;
2774
2765
Oid oid ;
@@ -2787,10 +2778,8 @@ PHP_FUNCTION(pg_lo_export)
2787
2778
link = Z_RES_P (pgsql_link );
2788
2779
}
2789
2780
else if (zend_parse_parameters_ex (ZEND_PARSE_PARAMS_QUIET , argc ,
2790
- "rsp" , & pgsql_link , & oid_string , & oid_strlen , & file_out , & name_len ) == SUCCESS ) {
2791
- /* TODO: Use subroutine? */
2792
- oid = (Oid )strtoul (oid_string , & end_ptr , 10 );
2793
- if ((oid_string + oid_strlen ) != end_ptr ) {
2781
+ "rSp" , & pgsql_link , & oid_string , & file_out , & name_len ) == SUCCESS ) {
2782
+ if (!is_valid_oid_string (oid_string , & oid )) {
2794
2783
/* wrong integer format */
2795
2784
zend_value_error ("Invalid OID value passed" );
2796
2785
RETURN_THROWS ();
@@ -2808,10 +2797,8 @@ PHP_FUNCTION(pg_lo_export)
2808
2797
CHECK_DEFAULT_LINK (link );
2809
2798
}
2810
2799
else if (zend_parse_parameters_ex (ZEND_PARSE_PARAMS_QUIET , argc ,
2811
- "sp" , & oid_string , & oid_strlen , & file_out , & name_len ) == SUCCESS ) {
2812
- /* TODO: Use subroutine? */
2813
- oid = (Oid )strtoul (oid_string , & end_ptr , 10 );
2814
- if ((oid_string + oid_strlen ) != end_ptr ) {
2800
+ "Sp" , & oid_string , & file_out , & name_len ) == SUCCESS ) {
2801
+ if (!is_valid_oid_string (oid_string , & oid )) {
2815
2802
/* wrong integer format */
2816
2803
zend_value_error ("Invalid OID value passed" );
2817
2804
RETURN_THROWS ();
0 commit comments