@@ -357,6 +357,7 @@ ZEND_API int zend_get_constant_ex(const char *name, uint name_len, zval *result,
357
357
int const_name_len = name_len - prefix_len - 1 ;
358
358
char * constant_name = colon + 1 ;
359
359
char * lcname ;
360
+ int found_const = 0 ;
360
361
361
362
lcname = zend_str_tolower_dup (name , prefix_len );
362
363
/* Check for namespace constant */
@@ -367,16 +368,25 @@ ZEND_API int zend_get_constant_ex(const char *name, uint name_len, zval *result,
367
368
memcpy (lcname + prefix_len + 1 , constant_name , const_name_len + 1 );
368
369
369
370
if (zend_hash_find (EG (zend_constants ), lcname , prefix_len + 1 + const_name_len + 1 , (void * * ) & c ) == SUCCESS ) {
370
- efree (lcname );
371
+ found_const = 1 ;
372
+ } else {
373
+ /* try lowercase */
374
+ zend_str_tolower (lcname + prefix_len + 1 , const_name_len );
375
+ if (zend_hash_find (EG (zend_constants ), lcname , prefix_len + 1 + const_name_len + 1 , (void * * ) & c ) == SUCCESS ) {
376
+ if ((c -> flags & CONST_CS ) == 0 ) {
377
+ found_const = 1 ;
378
+ }
379
+ }
380
+ }
381
+ efree (lcname );
382
+ if (found_const ) {
371
383
* result = c -> value ;
372
384
zval_update_constant_ex (& result , (void * )1 , NULL TSRMLS_CC );
373
385
zval_copy_ctor (result );
374
386
Z_SET_REFCOUNT_P (result , 1 );
375
387
Z_UNSET_ISREF_P (result );
376
388
return 1 ;
377
389
}
378
-
379
- efree (lcname );
380
390
/* name requires runtime resolution, need to check non-namespaced name */
381
391
if ((flags & IS_CONSTANT_UNQUALIFIED ) != 0 ) {
382
392
name = constant_name ;
@@ -414,7 +424,14 @@ ZEND_API int zend_register_constant(zend_constant *c TSRMLS_DC)
414
424
zend_str_tolower (lowercase_name , c -> name_len - 1 );
415
425
name = lowercase_name ;
416
426
} else {
417
- name = c -> name ;
427
+ char * slash = strrchr (c -> name , '\\' );
428
+ if (slash ) {
429
+ lowercase_name = estrndup (c -> name , c -> name_len - 1 );
430
+ zend_str_tolower (lowercase_name , slash - c -> name );
431
+ name = lowercase_name ;
432
+ } else {
433
+ name = c -> name ;
434
+ }
418
435
}
419
436
420
437
if ((strncmp (name , "__COMPILER_HALT_OFFSET__" , sizeof ("__COMPILER_HALT_OFFSET__" ) - 1 ) == 0 ) ||
0 commit comments