Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Replace memcpy() calls with memmove() to avoid undefined behavior when source and destination overlap. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | core-8-branch |
Files: | files | file ages | folders |
SHA3-256: |
0b45548847c06d9ed3d2851152fa4862 |
User & Date: | dgp 2019-04-17 19:23:56.719 |
Context
2019-07-31
| ||
19:39 | (cherry-pick from core-8-branch): Replace memcpy() calls with memmove() to avoid undefined behavior ... check-in: 382e19dea0 user: jan.nijtmans tags: core-8-5-branch | |
2019-04-18
| ||
08:31 | Style corrections and warning elimination check-in: 6be9e0f989 user: dkf tags: core-8-branch | |
2019-04-17
| ||
19:23 | Replace memcpy() calls with memmove() to avoid undefined behavior when source and destination overla... check-in: 0b45548847 user: dgp tags: core-8-branch | |
17:45 | Do not access allocated memory before initializing it. check-in: da82a19bbf user: dgp tags: core-8-branch | |
Changes
Changes to generic/tclUtf.c.
︙ | ︙ | |||
1135 1136 1137 1138 1139 1140 1141 | /* * To keep badly formed Utf strings from getting inflated by the * conversion (thereby causing a segfault), only copy the upper case * char to dst if its size is <= the original char. */ if ((len < TclUtfCount(upChar)) || ((upChar & 0xF800) == 0xD800)) { | | | 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 | /* * To keep badly formed Utf strings from getting inflated by the * conversion (thereby causing a segfault), only copy the upper case * char to dst if its size is <= the original char. */ if ((len < TclUtfCount(upChar)) || ((upChar & 0xF800) == 0xD800)) { memmove(dst, src, len); dst += len; } else { dst += Tcl_UniCharToUtf(upChar, dst); } src += len; } *dst = '\0'; |
︙ | ︙ | |||
1197 1198 1199 1200 1201 1202 1203 | /* * To keep badly formed Utf strings from getting inflated by the * conversion (thereby causing a segfault), only copy the lower case * char to dst if its size is <= the original char. */ if ((len < TclUtfCount(lowChar)) || ((lowChar & 0xF800) == 0xD800)) { | | | 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 | /* * To keep badly formed Utf strings from getting inflated by the * conversion (thereby causing a segfault), only copy the lower case * char to dst if its size is <= the original char. */ if ((len < TclUtfCount(lowChar)) || ((lowChar & 0xF800) == 0xD800)) { memmove(dst, src, len); dst += len; } else { dst += Tcl_UniCharToUtf(lowChar, dst); } src += len; } *dst = '\0'; |
︙ | ︙ | |||
1256 1257 1258 1259 1260 1261 1262 | /* Combine surrogates */ titleChar = (((titleChar & 0x3ff) << 10) | (ch & 0x3ff)) + 0x10000; } #endif titleChar = Tcl_UniCharToTitle(titleChar); if ((len < TclUtfCount(titleChar)) || ((titleChar & 0xF800) == 0xD800)) { | | | 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 | /* Combine surrogates */ titleChar = (((titleChar & 0x3ff) << 10) | (ch & 0x3ff)) + 0x10000; } #endif titleChar = Tcl_UniCharToTitle(titleChar); if ((len < TclUtfCount(titleChar)) || ((titleChar & 0xF800) == 0xD800)) { memmove(dst, src, len); dst += len; } else { dst += Tcl_UniCharToUtf(titleChar, dst); } src += len; } while (*src) { |
︙ | ︙ | |||
1279 1280 1281 1282 1283 1284 1285 | #endif /* Special exception for Georgian Asomtavruli chars, no titlecase. */ if ((unsigned)(lowChar - 0x1C90) >= 0x30) { lowChar = Tcl_UniCharToLower(lowChar); } if ((len < TclUtfCount(lowChar)) || ((lowChar & 0xF800) == 0xD800)) { | | | 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 | #endif /* Special exception for Georgian Asomtavruli chars, no titlecase. */ if ((unsigned)(lowChar - 0x1C90) >= 0x30) { lowChar = Tcl_UniCharToLower(lowChar); } if ((len < TclUtfCount(lowChar)) || ((lowChar & 0xF800) == 0xD800)) { memmove(dst, src, len); dst += len; } else { dst += Tcl_UniCharToUtf(lowChar, dst); } src += len; } *dst = '\0'; |
︙ | ︙ |