>Number: 4874 >Category: c++ >Synopsis: Using wide characters arrays sign extends the character data >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Wed Nov 14 02:36:02 PST 2001 >Closed-Date: >Last-Modified: >Originator: John Allen >Release: gcc 3.0.2 (Mandrake) >Organization: >Environment: Mandrake Linux 8.1 >Description: The following code produces incorrect results with the non-ascii characters being sign extended. wchar_t* wcp = L"Schöne Grüße"; >How-To-Repeat: Compile with gcc 3.02, and run as ./utf8 UTF-8 >Fix: Compile with gcc 2.95.2 >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="utf8.cpp" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="utf8.cpp" I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPHN0cmluZz4K I2luY2x1ZGUgPGxvY2FsZS5oPgojaW5jbHVkZSA8d2NoYXIuaD4KCi8vdXNpbmcgbmFtZXNwYWNl IHN0ZDsKCnR5cGVkZWYgd2NoYXJfdCBET01DaGFyOwoKY2xhc3MgRE9NU3RyaW5nOiAKCXB1Ymxp YyBiYXNpY19zdHJpbmc8RE9NQ2hhcj4KewpwdWJsaWM6CglET01TdHJpbmcoY29uc3QgRE9NQ2hh ciogcyk6CgkJYmFzaWNfc3RyaW5nPERPTUNoYXI+KHMpCgl7Cgl9CgoJRE9NU3RyaW5nKGNvbnN0 IGNoYXIqIHMpCgl7CgkJY29uc3QgdW5zaWduZWQgY2hhciogcHMgPSAoY29uc3QgdW5zaWduZWQg Y2hhciopczsKCQlET01DaGFyKiB0bXAgPSBuZXcgRE9NQ2hhcltzdHJsZW4ocykrMV07CgkJRE9N Q2hhciogcCA9IHRtcDsKCgkJd2hpbGUgKCpwcykKCQl7CgkJCSpwKysgPSAqcHMrKzsKCQl9CgkJ CQoJCSpwKysgPSAnXDAnOwoKCQkqZHluYW1pY19jYXN0PGJhc2ljX3N0cmluZzxET01DaGFyPio+ KHRoaXMpID0gdG1wOwoJCWRlbGV0ZSB0bXA7Cgl9CgoJZnJpZW5kIG9zdHJlYW0mIG9wZXJhdG9y PDwob3N0cmVhbSYgbywgY29uc3QgRE9NU3RyaW5nJiBzKTsKCnByaXZhdGU6Cn07Cgpvc3RyZWFt JiBvcGVyYXRvcjw8KG9zdHJlYW0mIG8sIGNvbnN0IERPTVN0cmluZyYgcykKewoJY29uc3QgRE9N Q2hhciogcCA9IHMuY19zdHIoKTsKCgl3aGlsZSAoKnApCgl7CgkJbyA8PCBoZXggPDwgKnArKyA8 PCAiICI7CgkJLy9vIDw8IGNoYXIoKnArKyAmIDB4MDBGRik7Cgl9CgoJcmV0dXJuIG87Cn0KCmlu dCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCnsKCWZvciAoaW50IGk9MTsgaSA8IGFyZ2M7 IGkrKykKCXsKCQlpZiAoIXNldGxvY2FsZShMQ19DVFlQRSwgYXJndltpXSkpIHsKCQkgIGNlcnIg PDwgIkNhbid0IHNldCB0aGUgc3BlY2lmaWVkIGxvY2FsZSEgIgoJCQkJICAiQ2hlY2sgTEFORywg TENfQ1RZUEUsIExDX0FMTC4iIDw8IGVuZGw7CgkJICByZXR1cm4gMTsKCQl9CgoJCURPTVN0cmlu ZyBzKCJTY2j2bmUgR3L832UiKTsKCQkKCQljZXJyIDw8ICJTdHJpbmcgbGVuZ3RoOiIgIDw8IHMu bGVuZ3RoKCkgPDwgZW5kbDsKCQljZXJyIDw8IHMgPDwgZW5kbDsKCgkJY2hhciB0bXBbNDA5Nl07 CgkJY29uc3Qgd2NoYXJfdCogd2NwID0gcy5jX3N0cigpOyAKCQltYnN0YXRlX3QgbWJzdGF0ZTsK CgkJaWYgKHdjc3J0b21icyh0bXAsICZ3Y3AsIHNpemVvZih0bXApLCAmbWJzdGF0ZSkgIT0gLTEp CgkJewoJCQljZXJyIDw8IGFyZ3ZbaV0gPDwgIjogIiA8PCB0bXAgPDwgZW5kbDsKCQl9CgkJZWxz ZQoJCXsKCQkJY2VyciA8PCAiQ29udmVyc2lvbiBmYWlsZWQiIDw8IGVuZGw7CgkJfQoJfQoJCgly ZXR1cm4gMDsKfQoK