Mombu the Php Forum

Go Back   Mombu the Php Forum > Php > Unicode and fetch class
User Name
Password
REGISTER NOW! Mark Forums Read




Reply
1 15th August 23:13
helly@php.net (marcus
External User
 
Posts: 1
Default Unicode and fetch class



------------7F156BABA1CEF3
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Hello internals,

Andrei asked me whether we could do something about the double
lowercasing when calling zend_is_callable_check_func(). The attached
patch adds the new fetch flag ZEND_FETCH_CLASS_NO_NORMALIZE which
prevent lowercasing. Also zend_u_lookup_class_ex() got a new parameter
which allows to specify whether the function needs to lowercase or
not. I am quite sure Andrei needs to touch it a bit further but i
think we should discuss this step first.

Best regards,
Marcus
------------7F156BABA1CEF3
Content-Type: text/plain; name="ze2-fetch-class-flags-20060715.diff.txt"
Content-transfer-encoding: base64
Content-Disposition: attachment; filename="ze2-fetch-class-flags-20060715.diff.txt"

PyBaZW5kL3Rlc3RzL2NhdGNoXzAwNS5waHB0CkluZGV4OiBaZW 5kL3plbmRfQVBJLmMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT 09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL3JlcG9zaXRvcnkvWmVuZE VuZ2luZTIvemVuZF9BUEku
Yyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNzgKZGlmZiAtdS AtcCAtZCAtcjEuMzc4IHpl
bmRfQVBJLmMKLS0tIFplbmQvemVuZF9BUEkuYwkxMyBKdWwgMj AwNiAyMToyNzo0OCAtMDAw
MAkxLjM3OAorKysgWmVuZC96ZW5kX0FQSS5jCTE1IEp1bCAyMD A2IDE5OjQ5OjI4IC0wMDAw
CkBAIC0yNTgxLDcgKzI1ODEsNiBAQCBzdGF0aWMgaW50IHplbm RfaXNfY2FsbGFibGVfY2hl
Y2tfZnVuYyhpCiAJenN0ciBsY25hbWUsIGxtbmFtZSwgbW5hbW UsIGNvbG9uOwogCXVuc2ln
bmVkIGludCBjbGVuLCBtbGVuOwogCXplbmRfZnVuY3Rpb24gKm ZwdHI7Ci0JemVuZF9jbGFz
c19lbnRyeSAqKnBjZTsKIAlIYXNoVGFibGUgKmZ0YWJsZTsKIA ogCSpjZV9wdHIgPSBOVUxM
OwpAQCAtMjYwMywxNSArMjYwMiw3IEBAIHN0YXRpYyBpbnQgem VuZF9pc19jYWxsYWJsZV9j
aGVja19mdW5jKGkKIAlpZiAoY29sb24udiAhPSBOVUxMKSB7Ci AJCWxjbmFtZSA9IHplbmRf
dV9zdHJfY2FzZV9mb2xkKFpfVFlQRV9QKGNhbGxhYmxlKSwgWl 9VTklWQUxfUChjYWxsYWJs
ZSksIGNsZW4sIDAsICZjbGVuKTsKIAkJLyogY2F1dGlvbjogbG NuYW1lIGlzIG5vdCAnXDAn
IHRlcm1pbmF0ZWQgKi8KLQkJaWYgKGNsZW4gPT0gc2l6ZW9mKC JzZWxmIikgLSAxICYmCi0J
CSAgICBaRU5EX1VfRVFVQUwoWl9UWVBFX1AoY2FsbGFibGUpLC BsY25hbWUsIGNsZW4sICJz
ZWxmIiwgc2l6ZW9mKCJzZWxmIiktMSkpIHsKLQkJCSpjZV9wdH IgPSBFRyhzY29wZSk7Ci0J
CX0gZWxzZSBpZiAoY2xlbiA9PSBzaXplb2YoInBhcmVudCIpIC 0gMSAmJgotCQkgICAgWkVO
RF9VX0VRVUFMKFpfVFlQRV9QKGNhbGxhYmxlKSwgbGNuYW1lLC BjbGVuLCAicGFyZW50Iiwg
c2l6ZW9mKCJwYXJlbnQiKS0xKSkgewotCQkJKmNlX3B0ciA9IE VHKHNjb3BlKSA/IEVHKHNj
b3BlKS0+cGFyZW50IDogTlVMTDsKLQkJfSBlbHNlIGlmICh6ZW 5kX3VfbG9va3VwX2NsYXNz
KFpfVFlQRV9QKGNhbGxhYmxlKSwgWl9VTklWQUxfUChjYWxsYW JsZSksIGNsZW4sICZwY2Ug
VFNSTUxTX0NDKSA9PSBTVUNDRVNTKSB7Ci0JCQkqY2VfcHRyID 0gKnBjZTsKLQkJfQorCQkq
Y2VfcHRyID0gemVuZF91X2ZldGNoX2NsYXNzKFpfVFlQRV9QKG NhbGxhYmxlKSwgbGNuYW1l
LCBjbGVuLCBaRU5EX0ZFVENIX0NMQVNTX0FVVE98WkVORF9GRV RDSF9DTEFTU19OT19OT1JN
QUxJWkUgVFNSTUxTX0NDKTsKIAkJZWZyZWUobGNuYW1lLnYpOw ogCQlpZiAoISpjZV9wdHIp
IHsKIAkJCXJldHVybiAwOwpJbmRleDogWmVuZC96ZW5kX2J1aW x0aW5fZnVuY3Rpb25zLmMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT 09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3JlcG9zaXRvcnkvWm VuZEVuZ2luZTIvemVuZF9i
dWlsdGluX2Z1bmN0aW9ucy5jLHYKcmV0cmlldmluZyByZXZpc2 lvbiAxLjMxOApkaWZmIC11
IC1wIC1kIC1yMS4zMTggemVuZF9idWlsdGluX2Z1bmN0aW9ucy 5jCi0tLSBaZW5kL3plbmRf
YnVpbHRpbl9mdW5jdGlvbnMuYwkxNSBKdWwgMjAwNiAxOToxNj oxOSAtMDAwMAkxLjMxOAor
KysgWmVuZC96ZW5kX2J1aWx0aW5fZnVuY3Rpb25zLmMJMTUgSn VsIDIwMDYgMTk6NDk6Mjkg
LTAwMDAKQEAgLTcwMiw3ICs3MDIsNyBAQCBzdGF0aWMgdm9pZC Bpc19hX2ltcGwoSU5URVJO
QUxfRlVOQ1RJT05fCiAKIAljb252ZXJ0X3RvX3RleHRfZXgoY2 xhc3NfbmFtZSk7CiAKLQlp
ZiAoemVuZF91X2xvb2t1cF9jbGFzc19leChaX1RZUEVfUFAoY2 xhc3NfbmFtZSksIFpfVU5J
VkFMX1BQKGNsYXNzX25hbWUpLCBaX1VOSUxFTl9QUChjbGFzc1 9uYW1lKSwgKGluc3RhbmNl
X2NlICE9IE5VTEwpID8gMSA6IDAsICZjZSBUU1JNTFNfQ0MpID 09IEZBSUxVUkUpIHsKKwlp
ZiAoemVuZF91X2xvb2t1cF9jbGFzc19leChaX1RZUEVfUFAoY2 xhc3NfbmFtZSksIFpfVU5J
VkFMX1BQKGNsYXNzX25hbWUpLCBaX1VOSUxFTl9QUChjbGFzc1 9uYW1lKSwgKGluc3RhbmNl
X2NlICE9IE5VTEwpID8gMSA6IDAsIDEsICZjZSBUU1JNTFNfQ0 MpID09IEZBSUxVUkUpIHsK
IAkJcmV0dmFsID0gMDsKIAl9IGVsc2UgewogCQlpZiAob25seV 9zdWJjbGFzcykgewpJbmRl
eDogWmVuZC96ZW5kX2NvbXBpbGUuaAo9PT09PT09PT09PT09PT 09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cl JDUyBmaWxlOiAvcmVwb3Np
dG9yeS9aZW5kRW5naW5lMi96ZW5kX2NvbXBpbGUuaCx2CnJldH JpZXZpbmcgcmV2aXNpb24g
MS4zNDMKZGlmZiAtdSAtcCAtZCAtcjEuMzQzIHplbmRfY29tcG lsZS5oCi0tLSBaZW5kL3pl
bmRfY29tcGlsZS5oCTEzIEp1biAyMDA2IDEyOjU2OjIwIC0wMD AwCTEuMzQzCisrKyBaZW5k
L3plbmRfY29tcGlsZS5oCTE1IEp1bCAyMDA2IDE5OjQ5OjMxIC 0wMDAwCkBAIC02MTUsNyAr
NjE1LDkgQEAgaW50IHplbmRsZXgoem5vZGUgKnplbmRsdmFsIF RTUk1MU19EQyk7CiAjZGVm
aW5lIFpFTkRfRkVUQ0hfQ0xBU1NfR0xPQkFMCQk0CiAjZGVmaW 5lIFpFTkRfRkVUQ0hfQ0xB
U1NfQVVUTwkJNQogI2RlZmluZSBaRU5EX0ZFVENIX0NMQVNTX0 lOVEVSRkFDRQk2Ci0jZGVm
aW5lIFpFTkRfRkVUQ0hfQ0xBU1NfTk9fQVVUT0xPQUQgMHg4MA orI2RlZmluZSBaRU5EX0ZF
VENIX0NMQVNTX0ZMQUdTICAgICAgICAweEYwCisjZGVmaW5lIF pFTkRfRkVUQ0hfQ0xBU1Nf
Tk9fTk9STUFMSVpFIDB4MTAKKyNkZWZpbmUgWkVORF9GRVRDSF 9DTEFTU19OT19BVVRPTE9B
RCAgMHg4MAogCiAvKiB2YXJpYWJsZSBwYXJzaW5nIHR5cGUgKG NvbXBpbGUtdGltZSkgKi8K
ICNkZWZpbmUgWkVORF9QQVJTRURfTUVNQkVSCQkJCSgxPDwwKQ pJbmRleDogWmVuZC96ZW5k
X2V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT 09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcm Vwb3NpdG9yeS9aZW5kRW5n
aW5lMi96ZW5kX2V4ZWN1dGUuaCx2CnJldHJpZXZpbmcgcmV2aX Npb24gMS4xMDAKZGlmZiAt
dSAtcCAtZCAtcjEuMTAwIHplbmRfZXhlY3V0ZS5oCi0tLSBaZW 5kL3plbmRfZXhlY3V0ZS5o
CTMxIE1heSAyMDA2IDEzOjAyOjE1IC0wMDAwCTEuMTAwCisrKy BaZW5kL3plbmRfZXhlY3V0
ZS5oCTE1IEp1bCAyMDA2IDE5OjQ5OjMxIC0wMDAwCkBAIC03MS w3ICs3MSw3IEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBzYWZlX2ZyZWVfenZhbF9wdHJfcmUKIH 0KIFpFTkRfQVBJIGludCB6
ZW5kX2xvb2t1cF9jbGFzcyhjaGFyICpuYW1lLCBpbnQgbmFtZV 9sZW5ndGgsIHplbmRfY2xh
c3NfZW50cnkgKioqY2UgVFNSTUxTX0RDKTsKIFpFTkRfQVBJIG ludCB6ZW5kX3VfbG9va3Vw
X2NsYXNzKHplbmRfdWNoYXIgdHlwZSwgenN0ciBuYW1lLCBpbn QgbmFtZV9sZW5ndGgsIHpl
bmRfY2xhc3NfZW50cnkgKioqY2UgVFNSTUxTX0RDKTsKLVpFTk RfQVBJIGludCB6ZW5kX3Vf
bG9va3VwX2NsYXNzX2V4KHplbmRfdWNoYXIgdHlwZSwgenN0ci BuYW1lLCBpbnQgbmFtZV9s
ZW5ndGgsIGludCB1c2VfYXV0b2xvYWQsIHplbmRfY2xhc3NfZW 50cnkgKioqY2UgVFNSTUxT
X0RDKTsKK1pFTkRfQVBJIGludCB6ZW5kX3VfbG9va3VwX2NsYX NzX2V4KHplbmRfdWNoYXIg
dHlwZSwgenN0ciBuYW1lLCBpbnQgbmFtZV9sZW5ndGgsIGludC B1c2VfYXV0b2xvYWQsIGlu
dCBkb19ub3JtYWxpemUsIHplbmRfY2xhc3NfZW50cnkgKioqY2 UgVFNSTUxTX0RDKTsKIFpF
TkRfQVBJIGludCB6ZW5kX2V2YWxfc3RyaW5nKGNoYXIgKnN0ci wgenZhbCAqcmV0dmFsX3B0
ciwgY2hhciAqc3RyaW5nX25hbWUgVFNSTUxTX0RDKTsKIFpFTk RfQVBJIGludCB6ZW5kX2V2
YWxfc3RyaW5nX2V4KGNoYXIgKnN0ciwgenZhbCAqcmV0dmFsX3 B0ciwgY2hhciAqc3RyaW5n
X25hbWUsIGludCBoYW5kbGVfZXhjZXB0aW9ucyBUU1JNTFNfRE MpOwogWkVORF9BUEkgaW50
IHplbmRfdV9ldmFsX3N0cmluZyh6ZW5kX3VjaGFyIHR5cGUsIH pzdHIgc3RyLCB6dmFsICpy
ZXR2YWxfcHRyLCBjaGFyICpzdHJpbmdfbmFtZSBUU1JNTFNfRE MpOwpJbmRleDogWmVuZC96
ZW5kX2V4ZWN1dGVfQVBJLmMKPT09PT09PT09PT09PT09PT09PT 09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZm lsZTogL3JlcG9zaXRvcnkv
WmVuZEVuZ2luZTIvemVuZF9leGVjdXRlX0FQSS5jLHYKcmV0cm lldmluZyByZXZpc2lvbiAx
LjM3NQpkaWZmIC11IC1wIC1kIC1yMS4zNzUgemVuZF9leGVjdX RlX0FQSS5jCi0tLSBaZW5k
L3plbmRfZXhlY3V0ZV9BUEkuYwkxMiBKdWwgMjAwNiAwNzo1ND oxOCAtMDAwMAkxLjM3NQor
KysgWmVuZC96ZW5kX2V4ZWN1dGVfQVBJLmMJMTUgSnVsIDIwMD YgMTk6NDk6MzEgLTAwMDAK
QEAgLTEwNjIsNyArMTA2Miw3IEBAIGludCB6ZW5kX2NhbGxfZn VuY3Rpb24oemVuZF9mY2Fs
bF9pbmZvICoKIH0KIAogCi1aRU5EX0FQSSBpbnQgemVuZF91X2 xvb2t1cF9jbGFzc19leCh6
ZW5kX3VjaGFyIHR5cGUsIHpzdHIgbmFtZSwgaW50IG5hbWVfbG VuZ3RoLCBpbnQgdXNlX2F1
dG9sb2FkLCB6ZW5kX2NsYXNzX2VudHJ5ICoqKmNlIFRTUk1MU1 9EQykKK1pFTkRfQVBJIGlu
dCB6ZW5kX3VfbG9va3VwX2NsYXNzX2V4KHplbmRfdWNoYXIgdH lwZSwgenN0ciBuYW1lLCBp
bnQgbmFtZV9sZW5ndGgsIGludCB1c2VfYXV0b2xvYWQsIGludC Bkb19ub3JtYWxpemUsIHpl
bmRfY2xhc3NfZW50cnkgKioqY2UgVFNSTUxTX0RDKQogewogCX p2YWwgKiphcmdzWzFdOwog
CXp2YWwgYXV0b2xvYWRfZnVuY3Rpb247CkBAIC0xMDgwLDEwIC sxMDgwLDE2IEBAIFpFTkRf
QVBJIGludCB6ZW5kX3VfbG9va3VwX2NsYXNzX2V4KHplbmQKIA kJcmV0dXJuIEZBSUxVUkU7
CiAJfQogCi0JbGNfbmFtZSA9IHplbmRfdV9zdHJfY2FzZV9mb2 xkKHR5cGUsIG5hbWUsIG5h
bWVfbGVuZ3RoLCAxLCAmbGNfbmFtZV9sZW4pOworCWlmIChkb1 9ub3JtYWxpemUpIHsKKwkJ
bGNfbmFtZSA9IHplbmRfdV9zdHJfY2FzZV9mb2xkKHR5cGUsIG 5hbWUsIG5hbWVfbGVuZ3Ro
LCAxLCAmbGNfbmFtZV9sZW4pOworCX0gZWxzZSB7CisJCWxjX2 5hbWUgPSBuYW1lOworCX0K
IAogCWlmICh6ZW5kX3VfaGFzaF9maW5kKEVHKGNsYXNzX3RhYm xlKSwgdHlwZSwgbGNfbmFt
ZSwgbGNfbmFtZV9sZW4rMSwgKHZvaWQgKiopIGNlKSA9PSBTVU NDRVNTKSB7Ci0JCWVmcmVl
KGxjX25hbWUudik7CisJCWlmIChkb19ub3JtYWxpemUpIHsKKw kJCWVmcmVlKGxjX25hbWUu
dik7CisJCX0KIAkJcmV0dXJuIFNVQ0NFU1M7CiAJfQogCkBAIC 0xMDkxLDcgKzEwOTcsOSBA
QCBaRU5EX0FQSSBpbnQgemVuZF91X2xvb2t1cF9jbGFzc19leC h6ZW5kCiAJICogKGRvZXNu
J3QgaW1wYWN0IGZ1Y3Rpb25hbGl0eSBvZiBfX2F1dG9sb2FkKC kKIAkqLwogCWlmICghdXNl
X2F1dG9sb2FkIHx8IHplbmRfaXNfY29tcGlsaW5nKFRTUk1MU1 9DKSkgewotCQllZnJlZShs
Y19uYW1lLnYpOworCQlpZiAoZG9fbm9ybWFsaXplKSB7CisJCQ llZnJlZShsY19uYW1lLnYp
OworCQl9CiAJCXJldHVybiBGQUlMVVJFOwogCX0KIApAQCAtMT EwMSw3ICsxMTA5LDkgQEAg
WkVORF9BUEkgaW50IHplbmRfdV9sb29rdXBfY2xhc3NfZXgoem VuZAogCX0KIAogCWlmICh6
ZW5kX3VfaGFzaF9hZGQoRUcoaW5fYXV0b2xvYWQpLCB0eXBlLC BsY19uYW1lLCBsY19uYW1l
X2xlbisxLCAodm9pZCoqKSZkdW1teSwgc2l6ZW9mKGNoYXIpLC BOVUxMKSA9PSBGQUlMVVJF
KSB7Ci0JCWVmcmVlKGxjX25hbWUudik7CisJCWlmIChkb19ub3 JtYWxpemUpIHsKKwkJCWVm
cmVlKGxjX25hbWUudik7CisJCX0KIAkJcmV0dXJuIEZBSUxVUk U7CiAJfQogCkBAIC0xMTQz
LDEyICsxMTUzLDE2IEBAIFpFTkRfQVBJIGludCB6ZW5kX3VfbG 9va3VwX2NsYXNzX2V4KHpl
bmQKIAogCWlmIChyZXR2YWwgPT0gRkFJTFVSRSkgewogCQlFRy hleGNlcHRpb24pID0gZXhj
ZXB0aW9uOwotCQllZnJlZShsY19uYW1lLnYpOworCQlpZiAoZG 9fbm9ybWFsaXplKSB7CisJ
CQllZnJlZShsY19uYW1lLnYpOworCQl9CiAJCXJldHVybiBGQU lMVVJFOwogCX0KIAogCWlm
IChFRyhleGNlcHRpb24pICYmIGV4Y2VwdGlvbikgewotCQllZn JlZShsY19uYW1lLnYpOwor
CQlpZiAoZG9fbm9ybWFsaXplKSB7CisJCQllZnJlZShsY19uYW 1lLnYpOworCQl9CiAJCXpl
bmRfZXJyb3IoRV9FUlJPUiwgIkZ1bmN0aW9uICVzKCVSKSB0aH JldyBhbiBleGNlcHRpb24g
b2YgdHlwZSAnJXYnIiwgWkVORF9BVVRPTE9BRF9GVU5DX05BTU UsIHR5cGUsIG5hbWUsIFpf
T0JKQ0VfUChFRyhleGNlcHRpb24pKS0+bmFtZSk7CiAJCXJldH VybiBGQUlMVVJFOwogCX0K
QEAgLTExNjAsMTMgKzExNzQsMTUgQEAgWkVORF9BUEkgaW50IH plbmRfdV9sb29rdXBfY2xh
c3NfZXgoemVuZAogCX0KIAogCXJldHZhbCA9IHplbmRfdV9oYX NoX2ZpbmQoRUcoY2xhc3Nf
dGFibGUpLCB0eXBlLCBsY19uYW1lLCBsY19uYW1lX2xlbiArID EsICh2b2lkICoqKSBjZSk7
Ci0JZWZyZWUobGNfbmFtZS52KTsKKwlpZiAoZG9fbm9ybWFsaX plKSB7CisJCWVmcmVlKGxj
X25hbWUudik7CisJfQogCXJldHVybiByZXR2YWw7CiB9CiAKIF pFTkRfQVBJIGludCB6ZW5k
X3VfbG9va3VwX2NsYXNzKHplbmRfdWNoYXIgdHlwZSwgenN0ci BuYW1lLCBpbnQgbmFtZV9s
ZW5ndGgsIHplbmRfY2xhc3NfZW50cnkgKioqY2UgVFNSTUxTX0 RDKQogewotCXJldHVybiB6
ZW5kX3VfbG9va3VwX2NsYXNzX2V4KHR5cGUsIG5hbWUsIG5hbW VfbGVuZ3RoLCAxLCBjZSBU
U1JNTFNfQ0MpOworCXJldHVybiB6ZW5kX3VfbG9va3VwX2NsYX NzX2V4KHR5cGUsIG5hbWUs
IG5hbWVfbGVuZ3RoLCAxLCAxLCBjZSBUU1JNTFNfQ0MpOwogfQ ogCiBaRU5EX0FQSSBpbnQg
emVuZF9sb29rdXBfY2xhc3MoY2hhciAqbmFtZSwgaW50IG5hbW VfbGVuZ3RoLCB6ZW5kX2Ns
YXNzX2VudHJ5ICoqKmNlIFRTUk1MU19EQykKQEAgLTE1NDUsOS ArMTU2MSwxMiBAQCB2b2lk
IHplbmRfdW5zZXRfdGltZW91dChUU1JNTFNfRCkKIFpFTkRfQV BJIHplbmRfY2xhc3NfZW50
cnkgKnplbmRfdV9mZXRjaF9jbGFzcyh6ZW5kX3VjaGFyIHR5cG UsIHpzdHIgY2xhc3NfbmFt
ZSwgdWludCBjbGFzc19uYW1lX2xlbiwgaW50IGZldGNoX3R5cG UgVFNSTUxTX0RDKQogewog
CXplbmRfY2xhc3NfZW50cnkgKipwY2U7Ci0JaW50IHVzZV9hdX RvbG9hZCA9IChmZXRjaF90
eXBlICYgWkVORF9GRVRDSF9DTEFTU19OT19BVVRPTE9BRCkgPT 0gMDsKKwlpbnQgdXNlX2F1
dG9sb2FkID0gKGZldGNoX3R5cGUgJiBaRU5EX0ZFVENIX0NMQV NTX05PX0FVVE9MT0FEKSAg
PyAwIDogMTsKKwlpbnQgZG9fbm9ybWFsaXplID0gKGZldGNoX3 R5cGUgJiBaRU5EX0ZFVENI
X0NMQVNTX05PX05PUk1BTElaRSkgPyAwIDogMTsKKwl6c3RyIG xjbmFtZTsKKworCWZldGNo
X3R5cGUgPSBmZXRjaF90eXBlICYgflpFTkRfRkVUQ0hfQ0xBU1 NfRkxBR1M7CiAKLQlmZXRj
aF90eXBlID0gZmV0Y2hfdHlwZSAmIH5aRU5EX0ZFVENIX0NMQV NTX05PX0FVVE9MT0FEOwog
Y2hlY2tfZmV0Y2hfdHlwZToKIAlzd2l0Y2ggKGZldGNoX3R5cG UpIHsKIAkJY2FzZSBaRU5E
X0ZFVENIX0NMQVNTX1NFTEY6CkBAIC0xNTY0LDE1ICsxNTgzLD I0IEBAIGNoZWNrX2ZldGNo
X3R5cGU6CiAJCQl9CiAJCQlyZXR1cm4gRUcoc2NvcGUpLT5wYX JlbnQ7CiAJCWNhc2UgWkVO
RF9GRVRDSF9DTEFTU19BVVRPOiB7Ci0JCQkJZmV0Y2hfdHlwZS A9IHplbmRfZ2V0X2NsYXNz
X2ZldGNoX3R5cGUodHlwZSwgY2xhc3NfbmFtZSwgY2xhc3Nfbm FtZV9sZW4pOworCQkJCWlm
IChkb19ub3JtYWxpemUpIHsKKwkJCQkJbGNuYW1lID0gemVuZF 91X3N0cl9jYXNlX2ZvbGQo
dHlwZSwgY2xhc3NfbmFtZSwgY2xhc3NfbmFtZV9sZW4sIDAsIC ZjbGFzc19uYW1lX2xlbik7
CisJCQkJCWRvX25vcm1hbGl6ZSA9IDA7CisJCQkJfSBlbHNlIH sKKwkJCQkJbGNuYW1lID0g
Y2xhc3NfbmFtZTsKKwkJCQl9CisJCQkJZmV0Y2hfdHlwZSA9IH plbmRfZ2V0X2NsYXNzX2Zl
dGNoX3R5cGUodHlwZSwgbGNuYW1lLCBjbGFzc19uYW1lX2xlbi k7CiAJCQkJaWYgKGZldGNo
X3R5cGUhPVpFTkRfRkVUQ0hfQ0xBU1NfREVGQVVMVCkgeworCQ kJCQlpZiAoZG9fbm9ybWFs
aXplKSB7CisJCQkJCQllZnJlZShsY25hbWUudik7CisJCQkJCX 0KIAkJCQkJZ290byBjaGVj
a19mZXRjaF90eXBlOwogCQkJCX0KIAkJCX0KIAkJCWJyZWFrOw ogCX0KIAotCWlmICh6ZW5k
X3VfbG9va3VwX2NsYXNzX2V4KHR5cGUsIGNsYXNzX25hbWUsIG NsYXNzX25hbWVfbGVuLCB1
c2VfYXV0b2xvYWQsICZwY2UgVFNSTUxTX0NDKT09RkFJTFVSRS kgeworCWlmICh6ZW5kX3Vf
bG9va3VwX2NsYXNzX2V4KHR5cGUsIGNsYXNzX25hbWUsIGNsYX NzX25hbWVfbGVuLCB1c2Vf
YXV0b2xvYWQsIGRvX25vcm1hbGl6ZSwgJnBjZSBUU1JNTFNfQ0 MpPT1GQUlMVVJFKSB7CiAJ
CWlmICh1c2VfYXV0b2xvYWQpIHsKIAkJCWlmIChmZXRjaF90eX BlID09IFpFTkRfRkVUQ0hf
Q0xBU1NfSU5URVJGQUNFKSB7CiAJCQkJemVuZF9lcnJvcihFX0 VSUk9SLCAiSW50ZXJmYWNl
ICclUicgbm90IGZvdW5kIiwgdHlwZSwgY2xhc3NfbmFtZSk7Ck luZGV4OiBleHQvcmVmbGVj
dGlvbi9waHBfcmVmbGVjdGlvbi5jCj09PT09PT09PT09PT09PT 09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUk NTIGZpbGU6IC9yZXBvc2l0
b3J5L3BocC1zcmMvZXh0L3JlZmxlY3Rpb24vcGhwX3JlZmxlY3 Rpb24uYyx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4yNDMKZGlmZiAtdSAtcCAtZCAtcjEuMj QzIHBocF9yZWZsZWN0aW9u
LmMKLS0tIGV4dC9yZWZsZWN0aW9uL3BocF9yZWZsZWN0aW9uLm MJMTMgSnVsIDIwMDYgMTI6
MzQ6MzAgLTAwMDAJMS4yNDMKKysrIGV4dC9yZWZsZWN0aW9uL3 BocF9yZWZsZWN0aW9uLmMJ
MTUgSnVsIDIwMDYgMTk6NDk6MzkgLTAwMDAKQEAgLTE5NzIsNy ArMTk3Miw3IEBAIFpFTkRf
TUVUSE9EKHJlZmxlY3Rpb25fcGFyYW1ldGVyLCBnZXRDbGEKIA lHRVRfUkVGTEVDVElPTl9P
QkpFQ1RfUFRSKHBhcmFtKTsKIAogCWlmIChwYXJhbS0+YXJnX2 luZm8tPmNsYXNzX25hbWUu
dikgewotCQlpZiAoemVuZF91X2xvb2t1cF9jbGFzc19leChVRy h1bmljb2RlKT9JU19VTklD
T0RFOklTX1NUUklORywgcGFyYW0tPmFyZ19pbmZvLT5jbGFzc1 9uYW1lLCBwYXJhbS0+YXJn
X2luZm8tPmNsYXNzX25hbWVfbGVuLCAxLCAmcGNlIFRTUk1MU1 9DQykgPT0gRkFJTFVSRSkg
eworCQlpZiAoemVuZF91X2xvb2t1cF9jbGFzc19leChVRyh1bm ljb2RlKT9JU19VTklDT0RF
OklTX1NUUklORywgcGFyYW0tPmFyZ19pbmZvLT5jbGFzc19uYW 1lLCBwYXJhbS0+YXJnX2lu
Zm8tPmNsYXNzX25hbWVfbGVuLCAxLCAxLCAmcGNlIFRTUk1MU1 9DQykgPT0gRkFJTFVSRSkg
ewogCQkJemVuZF90aHJvd19leGNlcHRpb25fZXgocmVmbGVjdG lvbl9leGNlcHRpb25fcHRy
LCAwIFRTUk1MU19DQywgCiAJCQkJIkNsYXNzICV2IGRvZXMgbm 90IGV4aXN0IiwgcGFyYW0t
PmFyZ19pbmZvLT5jbGFzc19uYW1lKTsKIAkJCXJldHVybjsK

------------7F156BABA1CEF3
Content-Type: text/plain; charset=us-ascii

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
------------7F156BABA1CEF3--
  Reply With Quote


 


2 16th August 05:10
andrei@gravitonic.com (andrei
External User
 
Posts: 1
Default Unicode and fetch class



I fixed some bugs and reworked the patch. Please look it over, as I
intend to commit it in the next couple of days.

The next step would be fixing zend_u_str_case_fold() to do only case
folding and having all normalization go through
zend_normalize_identifier().

-Andrei


--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
  Reply With Quote
3 16th August 05:10
andrei@gravitonic.com (andrei
External User
 
Posts: 1
Default Unicode and fetch class


--Apple-Mail-1-912469410
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
charset=US-ASCII;
format=flowed

Of course it would help if I attached the patch..

-Andrei


--Apple-Mail-1-912469410
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
x-unix-mode=0644;
name="ze2-fetch-class-flags-20060717.diff.txt"
Content-Disposition: attachment;
filename=ze2-fetch-class-flags-20060717.diff.txt

Index: Zend/zend_API.c
================================================== =================
RCS file: /repository/ZendEngine2/zend_API.c,v
retrieving revision 1.378
diff -p -u -r1.378 zend_API.c
--- Zend/zend_API.c 13 Jul 2006 21:27:48 -0000 1.378
+++ Zend/zend_API.c 17 Jul 2006 19:47:30 -0000
@@ -2578,10 +2578,9 @@ ZEND_API int zend_disable_class(char *cl
static int zend_is_callable_check_func(int check_flags, zval ***zobj_ptr_ptr, zend_class_entry *ce_org, zval *callable, zend_class_entry **ce_ptr, zend_function **fptr_ptr TSRMLS_DC)
{
int retval;
- zstr lcname, lmname, mname, colon;
+ zstr lmname, mname, colon;
unsigned int clen, mlen;
zend_function *fptr;
- zend_class_entry **pce;
HashTable *ftable;

*ce_ptr = NULL;
@@ -2601,18 +2600,7 @@ static int zend_is_callable_check_func(i
}
}
if (colon.v != NULL) {
- lcname = zend_u_str_case_fold(Z_TYPE_P(callable), Z_UNIVAL_P(callable), clen, 0, &clen);
- /* caution: lcname is not '\0' terminated */
- if (clen == sizeof("self") - 1 &&
- ZEND_U_EQUAL(Z_TYPE_P(callable), lcname, clen, "self", sizeof("self")-1)) {
- *ce_ptr = EG(scope);
- } else if (clen == sizeof("parent") - 1 &&
- ZEND_U_EQUAL(Z_TYPE_P(callable), lcname, clen, "parent", sizeof("parent")-1)) {
- *ce_ptr = EG(scope) ? EG(scope)->parent : NULL;
- } else if (zend_u_lookup_class(Z_TYPE_P(callable), Z_UNIVAL_P(callable), clen, &pce TSRMLS_CC) == SUCCESS) {
- *ce_ptr = *pce;
- }
- efree(lcname.v);
+ *ce_ptr = zend_u_fetch_class(Z_TYPE_P(callable), Z_UNIVAL_P(callable), clen, ZEND_FETCH_CLASS_AUTO TSRMLS_CC);
if (!*ce_ptr) {
return 0;
}
@@ -2620,9 +2608,9 @@ static int zend_is_callable_check_func(i
if (ce_org && !instanceof_function(ce_org, *ce_ptr TSRMLS_CC)) {
return 0;
}
- lmname = zend_u_str_case_fold(Z_TYPE_P(callable), mname, mlen, 0, &mlen);
+ lmname = zend_u_str_case_fold(Z_TYPE_P(callable), mname, mlen, 1, &mlen);
} else {
- lmname = zend_u_str_case_fold(Z_TYPE_P(callable), Z_UNIVAL_P(callable), Z_UNILEN_P(callable), 0, &mlen);
+ lmname = zend_u_str_case_fold(Z_TYPE_P(callable), Z_UNIVAL_P(callable), Z_UNILEN_P(callable), 1, &mlen);
if (ce_org) {
ftable = &ce_org->function_table;
*ce_ptr = ce_org;
Index: Zend/zend_builtin_functions.c
================================================== =================
RCS file: /repository/ZendEngine2/zend_builtin_functions.c,v
retrieving revision 1.317
diff -p -u -r1.317 zend_builtin_functions.c
--- Zend/zend_builtin_functions.c 9 Jul 2006 22:40:10 -0000 1.317
+++ Zend/zend_builtin_functions.c 17 Jul 2006 19:47:30 -0000
@@ -702,7 +702,7 @@ static void is_a_impl(INTERNAL_FUNCTION_

convert_to_text_ex(class_name);

- if (zend_u_lookup_class_ex(Z_TYPE_PP(class_name), Z_UNIVAL_PP(class_name), Z_UNILEN_PP(class_name), (instance_ce != NULL), &ce TSRMLS_CC) == FAILURE) {
+ if (zend_u_lookup_class_ex(Z_TYPE_PP(class_name), Z_UNIVAL_PP(class_name), Z_UNILEN_PP(class_name), (instance_ce != NULL) ? 1 : 0, 1, &ce TSRMLS_CC) == FAILURE) {
retval = 0;
} else {
if (only_subclass) {
Index: Zend/zend_compile.h
================================================== =================
RCS file: /repository/ZendEngine2/zend_compile.h,v
retrieving revision 1.343
diff -p -u -r1.343 zend_compile.h
--- Zend/zend_compile.h 13 Jun 2006 12:56:20 -0000 1.343
+++ Zend/zend_compile.h 17 Jul 2006 19:47:30 -0000
@@ -615,7 +615,9 @@ int zendlex(znode *zendlval TSRMLS_DC);
#define ZEND_FETCH_CLASS_GLOBAL 4
#define ZEND_FETCH_CLASS_AUTO 5
#define ZEND_FETCH_CLASS_INTERFACE 6
-#define ZEND_FETCH_CLASS_NO_AUTOLOAD 0x80
+#define ZEND_FETCH_CLASS_FLAGS 0xF0
+#define ZEND_FETCH_CLASS_NO_NORMALIZE 0x10
+#define ZEND_FETCH_CLASS_NO_AUTOLOAD 0x80

/* variable parsing type (compile-time) */
#define ZEND_PARSED_MEMBER (1<<0)
Index: Zend/zend_execute.c
================================================== =================
RCS file: /repository/ZendEngine2/zend_execute.c,v
retrieving revision 1.748
diff -p -u -r1.748 zend_execute.c
--- Zend/zend_execute.c 10 Jul 2006 00:32:23 -0000 1.748
+++ Zend/zend_execute.c 17 Jul 2006 19:47:30 -0000
@@ -944,7 +944,7 @@ fetch_string_dim:
UChar *norm;
int norm_len;

- if (!zend_normalize_identifier(&norm, &norm_len, offset_key.u, offset_key_length, 0)) {
+ if (zend_normalize_identifier(&norm, &norm_len, offset_key.u, offset_key_length, 0) == FAILURE) {
zend_error(E_WARNING, "Could not normalize identifier: %r", offset_key);
} else if (norm != offset_key.u) {
offset_key.u = norm;
Index: Zend/zend_execute.h
================================================== =================
RCS file: /repository/ZendEngine2/zend_execute.h,v
retrieving revision 1.100
diff -p -u -r1.100 zend_execute.h
--- Zend/zend_execute.h 31 May 2006 13:02:15 -0000 1.100
+++ Zend/zend_execute.h 17 Jul 2006 19:47:30 -0000
@@ -71,7 +71,7 @@ static inline void safe_free_zval_ptr_re
}
ZEND_API int zend_lookup_class(char *name, int name_length, zend_class_entry ***ce TSRMLS_DC);
ZEND_API int zend_u_lookup_class(zend_uchar type, zstr name, int name_length, zend_class_entry ***ce TSRMLS_DC);
-ZEND_API int zend_u_lookup_class_ex(zend_uchar type, zstr name, int name_length, int use_autoload, zend_class_entry ***ce TSRMLS_DC);
+ZEND_API int zend_u_lookup_class_ex(zend_uchar type, zstr name, int name_length, int use_autoload, int do_normalize, zend_class_entry ***ce TSRMLS_DC);
ZEND_API int zend_eval_string(char *str, zval *retval_ptr, char *string_name TSRMLS_DC);
ZEND_API int zend_eval_string_ex(char *str, zval *retval_ptr, char *string_name, int handle_exceptions TSRMLS_DC);
ZEND_API int zend_u_eval_string(zend_uchar type, zstr str, zval *retval_ptr, char *string_name TSRMLS_DC);
Index: Zend/zend_execute_API.c
================================================== =================
RCS file: /repository/ZendEngine2/zend_execute_API.c,v
retrieving revision 1.375
diff -p -u -r1.375 zend_execute_API.c
--- Zend/zend_execute_API.c 12 Jul 2006 07:54:18 -0000 1.375
+++ Zend/zend_execute_API.c 17 Jul 2006 19:47:30 -0000
@@ -784,7 +784,7 @@ int zend_call_function(zend_fcall_info *
}

if (Z_TYPE_P(fci->function_name) == IS_UNICODE) {
- if ((colon.u = u_strstr(Z_USTRVAL_P(fci->function_name), (UChar*)":\0:\0")) != NULL) {
+ if ((colon.u = u_strstr(Z_USTRVAL_P(fci->function_name), u_doublecolon)) != NULL) {
fname_len = u_strlen(colon.u+2);
clen = Z_USTRLEN_P(fci->function_name) - fname_len - 2;
fname.u = colon.u + 2;
@@ -799,7 +799,7 @@ int zend_call_function(zend_fcall_info *
if (colon.v != NULL) {
zend_class_entry **pce, *ce_child = NULL;

- lcname = zend_u_str_case_fold(Z_TYPE_P(fci->function_name), Z_UNIVAL_P(fci->function_name), clen, 0, &clen);
+ lcname = zend_u_str_case_fold(Z_TYPE_P(fci->function_name), Z_UNIVAL_P(fci->function_name), clen, 1, &clen);
/* caution: lcname is not '\0' terminated */
if (calling_scope && clen == sizeof("self") - 1 &&
ZEND_U_EQUAL(Z_TYPE_P(fci->function_name), lcname, clen, "self", sizeof("self")-1)) {
@@ -807,7 +807,7 @@ int zend_call_function(zend_fcall_info *
} else if (calling_scope && clen == sizeof("parent") - 1 &&
ZEND_U_EQUAL(Z_TYPE_P(fci->function_name), lcname, clen, "parent", sizeof("parent")-1)) {
ce_child = EG(active_op_array) && EG(active_op_array)->scope ? EG(scope)->parent : NULL;
- } else if (zend_u_lookup_class(Z_TYPE_P(fci->function_name), Z_UNIVAL_P(fci->function_name), clen, &pce TSRMLS_CC) == SUCCESS) {
+ } else if (zend_u_lookup_class_ex(Z_TYPE_P(fci->function_name), lcname, clen, 1, 0, &pce TSRMLS_CC) == SUCCESS) {
ce_child = *pce;
}
efree(lcname.v);
@@ -1062,7 +1062,7 @@ int zend_call_function(zend_fcall_info *
}


-ZEND_API int zend_u_lookup_class_ex(zend_uchar type, zstr name, int name_length, int use_autoload, zend_class_entry ***ce TSRMLS_DC)
+ZEND_API int zend_u_lookup_class_ex(zend_uchar type, zstr name, int name_length, int use_autoload, int do_normalize, zend_class_entry ***ce TSRMLS_DC)
{
zval **args[1];
zval autoload_function;
@@ -1080,10 +1080,17 @@ ZEND_API int zend_u_lookup_class_ex(zend
return FAILURE;
}

- lc_name = zend_u_str_case_fold(type, name, name_length, 1, &lc_name_len);
+ if (do_normalize) {
+ lc_name = zend_u_str_case_fold(type, name, name_length, 1, &lc_name_len);
+ } else {
+ lc_name = name;
+ lc_name_len = name_length;
+ }

if (zend_u_hash_find(EG(class_table), type, lc_name, lc_name_len+1, (void **) ce) == SUCCESS) {
- efree(lc_name.v);
+ if (do_normalize) {
+ efree(lc_name.v);
+ }
return SUCCESS;
}

@@ -1091,7 +1098,9 @@ ZEND_API int zend_u_lookup_class_ex(zend
* (doesn't impact fuctionality of __autoload()
*/
if (!use_autoload || zend_is_compiling(TSRMLS_C)) {
- efree(lc_name.v);
+ if (do_normalize) {
+ efree(lc_name.v);
+ }
return FAILURE;
}

@@ -1101,7 +1110,9 @@ ZEND_API int zend_u_lookup_class_ex(zend
}

if (zend_u_hash_add(EG(in_autoload), type, lc_name, lc_name_len+1, (void**)&dummy, sizeof(char), NULL) == FAILURE) {
- efree(lc_name.v);
+ if (do_normalize) {
+ efree(lc_name.v);
+ }
return FAILURE;
}

@@ -1143,12 +1154,16 @@ ZEND_API int zend_u_lookup_class_ex(zend

if (retval == FAILURE) {
EG(exception) = exception;
- efree(lc_name.v);
+ if (do_normalize) {
+ efree(lc_name.v);
+ }
return FAILURE;
}

if (EG(exception) && exception) {
- efree(lc_name.v);
+ if (do_normalize) {
+ efree(lc_name.v);
+ }
zend_error(E_ERROR, "Function %s(%R) threw an exception of type '%v'", ZEND_AUTOLOAD_FUNC_NAME, type, name, Z_OBJCE_P(EG(exception))->name);
return FAILURE;
}
@@ -1160,13 +1175,15 @@ ZEND_API int zend_u_lookup_class_ex(zend
}

retval = zend_u_hash_find(EG(class_table), type, lc_name, lc_name_len + 1, (void **) ce);
- efree(lc_name.v);
+ if (do_normalize) {
+ efree(lc_name.v);
+ }
return retval;
}

ZEND_API int zend_u_lookup_class(zend_uchar type, zstr name, int name_length, zend_class_entry ***ce TSRMLS_DC)
{
- return zend_u_lookup_class_ex(type, name, name_length, 1, ce TSRMLS_CC);
+ return zend_u_lookup_class_ex(type, name, name_length, 1, 1, ce TSRMLS_CC);
}

ZEND_API int zend_lookup_class(char *name, int name_length, zend_class_entry ***ce TSRMLS_DC)
@@ -1545,9 +1562,12 @@ void zend_unset_timeout(TSRMLS_D)
ZEND_API zend_class_entry *zend_u_fetch_class(zend_uchar type, zstr class_name, uint class_name_len, int fetch_type TSRMLS_DC)
{
zend_class_entry **pce;
- int use_autoload = (fetch_type & ZEND_FETCH_CLASS_NO_AUTOLOAD) == 0;
+ int use_autoload = (fetch_type & ZEND_FETCH_CLASS_NO_AUTOLOAD) ? 0 : 1;
+ int do_normalize = (fetch_type & ZEND_FETCH_CLASS_NO_NORMALIZE) ? 0 : 1;
+ zstr lcname = class_name;
+
+ fetch_type = fetch_type & ~ZEND_FETCH_CLASS_FLAGS;

- fetch_type = fetch_type & ~ZEND_FETCH_CLASS_NO_AUTOLOAD;
check_fetch_type:
switch (fetch_type) {
case ZEND_FETCH_CLASS_SELF:
@@ -1564,15 +1584,22 @@ check_fetch_type:
}
return EG(scope)->parent;
case ZEND_FETCH_CLASS_AUTO: {
- fetch_type = zend_get_class_fetch_type(type, class_name, class_name_len);
+ if (do_normalize) {
+ lcname = zend_u_str_case_fold(type, class_name, class_name_len, 1, &class_name_len);
+ }
+ fetch_type = zend_get_class_fetch_type(type, lcname, class_name_len);
if (fetch_type!=ZEND_FETCH_CLASS_DEFAULT) {
+ if (do_normalize) {
+ efree(lcname.v);
+ do_normalize = 0; /* we've normalized it already, don't do it twice */
+ }
goto check_fetch_type;
}
}
break;
}

- if (zend_u_lookup_class_ex(type, class_name, class_name_len, use_autoload, &pce TSRMLS_CC)==FAILURE) {
+ if (zend_u_lookup_class_ex(type, lcname, class_name_len, use_autoload, do_normalize, &pce TSRMLS_CC)==FAILURE) {
if (use_autoload) {
if (fetch_type == ZEND_FETCH_CLASS_INTERFACE) {
zend_error(E_ERROR, "Interface '%R' not found", type, class_name);
@@ -1580,8 +1607,14 @@ check_fetch_type:
zend_error(E_ERROR, "Class '%R' not found", type, class_name);
}
}
+ if (lcname.v != class_name.v) {
+ efree(lcname.v);
+ }
return NULL;
} else {
+ if (lcname.v != class_name.v) {
+ efree(lcname.v);
+ }
return *pce;
}
}
Index: Zend/zend_language_scanner.l
================================================== =================
RCS file: /repository/ZendEngine2/zend_language_scanner.l,v
retrieving revision 1.155
diff -p -u -r1.155 zend_language_scanner.l
--- Zend/zend_language_scanner.l 12 Jun 2006 17:06:39 -0000 1.155
+++ Zend/zend_language_scanner.l 17 Jul 2006 19:47:30 -0000
@@ -444,7 +444,7 @@ static inline int zend_check_and_normali
efree(Z_USTRVAL_P(zendlval));
return 0;
}
- if (!zend_normalize_identifier(&norm, &norm_len, Z_USTRVAL_P(zendlval), Z_USTRLEN_P(zendlval), 0)) {
+ if (zend_normalize_identifier(&norm, &norm_len, Z_USTRVAL_P(zendlval), Z_USTRLEN_P(zendlval), 0) == FAILURE) {
zend_error(E_COMPILE_WARNING, "Could not normalize identifier: %r", Z_USTRVAL_P(zendlval));
efree(Z_USTRVAL_P(zendlval));
return 0;
Index: Zend/zend_operators.c
================================================== =================
RCS file: /repository/ZendEngine2/zend_operators.c,v
retrieving revision 1.248
diff -p -u -r1.248 zend_operators.c
--- Zend/zend_operators.c 12 Jul 2006 19:34:55 -0000 1.248
+++ Zend/zend_operators.c 17 Jul 2006 19:47:30 -0000
@@ -2109,14 +2109,21 @@ ZEND_API zstr zend_u_str_case_fold(zend_
zstr ret;

if (type == IS_UNICODE) {
- int ret_len;
+ int ret_len = length;

if (normalize) {
- zend_normalize_identifier(&ret.u, &ret_len, source.u, length, 1);
+ if (zend_normalize_identifier(&ret.u, &ret_len, source.u, length, 1) == FAILURE) {
+ zend_error(E_NOTICE, "Could not normalize identifier");
+ ret.u = eustrndup(source.u, length);
+ }
} else {
UErrorCode status = U_ZERO_ERROR;

zend_case_fold_string(&ret.u, &ret_len, source.u, length, U_FOLD_CASE_DEFAULT, &status);
+ if (U_FAILURE(status)) {
+ zend_error(E_NOTICE, "Could not case-fold string");
+ ret.u = eustrndup(source.u, length);
+ }
}

*new_len = ret_len;
Index: Zend/zend_unicode.c
================================================== =================
RCS file: /repository/ZendEngine2/zend_unicode.c,v
retrieving revision 1.25
diff -p -u -r1.25 zend_unicode.c
--- Zend/zend_unicode.c 12 Jul 2006 17:35:06 -0000 1.25
+++ Zend/zend_unicode.c 17 Jul 2006 19:47:30 -0000
@@ -736,7 +736,7 @@ ZEND_API int zend_normalize_identifier(U
if (unorm_quickCheck(ident, ident_len, UNORM_NFKC, &status) != UNORM_YES) {
zend_normalize_string(&buffer, &buffer_len, ident, ident_len, &status);
if (U_FAILURE(status)) {
- return 0;
+ return FAILURE;
}
ident = buffer;
ident_len = buffer_len;
@@ -748,7 +748,7 @@ ZEND_API int zend_normalize_identifier(U
efree(ident);
}
if (U_FAILURE(status)) {
- return 0;
+ return FAILURE;
}
ident = buffer;
ident_len = buffer_len;
@@ -759,7 +759,7 @@ ZEND_API int zend_normalize_identifier(U
efree(ident);
}
if (U_FAILURE(status)) {
- return 0;
+ return FAILURE;
}
ident = buffer;
ident_len = buffer_len;
@@ -768,7 +768,7 @@ ZEND_API int zend_normalize_identifier(U

*dest = ident;
*dest_len = ident_len;
- return 1;
+ return SUCCESS;
}
/* }}} */

Index: ext/reflection/php_reflection.c
================================================== =================
RCS file: /repository/php-src/ext/reflection/php_reflection.c,v
retrieving revision 1.243
diff -p -u -r1.243 php_reflection.c
--- ext/reflection/php_reflection.c 13 Jul 2006 12:34:30 -0000 1.243
+++ ext/reflection/php_reflection.c 17 Jul 2006 19:47:31 -0000
@@ -1972,7 +1972,7 @@ ZEND_METHOD(reflection_parameter, getCla
GET_REFLECTION_OBJECT_PTR(param);

if (param->arg_info->class_name.v) {
- if (zend_u_lookup_class_ex(UG(unicode)?IS_UNICODE:IS_ STRING, param->arg_info->class_name, param->arg_info->class_name_len, 1, &pce TSRMLS_CC) == FAILURE) {
+ if (zend_u_lookup_class_ex(UG(unicode)?IS_UNICODE:IS_ STRING, param->arg_info->class_name, param->arg_info->class_name_len, 1, 1, &pce TSRMLS_CC) == FAILURE) {
zend_throw_exception_ex(reflection_exception_ptr, 0 TSRMLS_CC,
"Class %v does not exist", param->arg_info->class_name);
return;


--Apple-Mail-1-912469410
Content-Type: text/plain; charset=us-ascii

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
--Apple-Mail-1-912469410--
  Reply With Quote
4 16th August 06:12
helly@php.net (marcus
External User
 
Posts: 1
Default Unicode and fetch class


Hello Andrei,

looks pretty fine to me, after your treatment, go ahead commit - Andi, Zeev?

best regards
marcus


Best regards,
Marcus

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
  Reply With Quote
5 16th August 06:12
andi@zend.com (andi
External User
 
Posts: 1
Default Unicode and fetch class


Looks OK to me. Can we call it ZEND_FETCH_CLASS_NO_LOWERCASE instead of
ZEND_FETCH_CLASS_NO_NORMALIZE. No biggy but I always think of normalizing as
in taking a Unicode string and normalizing it. Or is that what you're
actually doing here? Asking because we agreed we won't normalize
automagically in PHP.

Andi


--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
  Reply With Quote
6 16th August 06:12
helly@php.net (marcus
External User
 
Posts: 1
Default Unicode and fetch class


Hello Andi,

well when i first came up with the patch there was only lowercasing
involved. So you have to ask our unicode guru for the current state :-)

best regards
marcus

Best regards,
Marcus

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
  Reply With Quote
7 16th August 06:12
andrei@gravitonic.com (andrei
External User
 
Posts: 1
Default Unicode and fetch class


We are actually normalizing, but only identifiers.

-Andrei

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
  Reply With Quote
8 16th August 06:12
andrei@gravitonic.com (andrei
External User
 
Posts: 1
Default Unicode and fetch class


Yes, we are. But normalization (in our case) may involve case-folding
(for class/function names), so it's really a single operation. If you
are asking whether we should have 2 flags for it, I don't believe so.

-Andrei


--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
  Reply With Quote
9 16th August 06:12
andi@zend.com (andi
External User
 
Posts: 1
Default Unicode and fetch class


Is there a good reason for normalizing? I thought we are fine with expecting
developers to use standard form and not suffer performance penalties. I'm
not a Unicode expert so my question might be somewhat ignorant..


--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
  Reply With Quote
10 16th August 07:26
andrei@gravitonic.com (andrei
External User
 
Posts: 1
Default Unicode and fetch class


We did talk about this before, on the php-unicode list if you
remember. The UTR#31 has a section about normalization:

http://www.unicode.org/reports/tr31/

I think we should see what kind of performance penalties identifier
normalization brings with it, if any. Once we have the numbers, it's
very easy to replace full normalization with simple case-folding.

-Andrei

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
  Reply With Quote
Reply


Thread Tools
Display Modes




666