From f2569b9423dab5bace329ccca21c1ff967a86c74 Mon Sep 17 00:00:00 2001 From: Laurence Withers Date: Wed, 14 Oct 2009 15:24:08 +0000 Subject: [PATCH 1/7] utf8_decode_char2(): fix overlength char test The test for an overlength character was incorrect; it was comparing only the last byte decoded rather than the whole char. Fix it. --- src/libutf8/200_decode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libutf8/200_decode.c b/src/libutf8/200_decode.c index f01b7e0..f1bc920 100644 --- a/src/libutf8/200_decode.c +++ b/src/libutf8/200_decode.c @@ -74,7 +74,7 @@ utf8_decode_char2(const char* src, size_t size, size_t* used) ret |= ch & 0x3F; } - if(ch < min) { + if(ret < min) { errno = EILSEQ; return 0; } From b04ebb80e6bc4c954db04392183feebd347c8647 Mon Sep 17 00:00:00 2001 From: Laurence Withers Date: Wed, 14 Oct 2009 15:27:07 +0000 Subject: [PATCH 2/7] utf8_decode_char2(): fix return value The return value of utf8_decode_char2() was 0, not (wchar_t)-1 as stated in the documentation. Fix it. --- src/libutf8/200_decode.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/libutf8/200_decode.c b/src/libutf8/200_decode.c index f1bc920..414ed50 100644 --- a/src/libutf8/200_decode.c +++ b/src/libutf8/200_decode.c @@ -24,7 +24,7 @@ utf8_decode_char2(const char* src, size_t size, size_t* used) if(!src || !size) { errno = EINVAL; - return 0; + return (wchar_t)-1; } if(used) *used = 1; ch = *src++; @@ -57,18 +57,18 @@ utf8_decode_char2(const char* src, size_t size, size_t* used) ret = ch & 0x01; } else { errno = EILSEQ; - return 0; + return (wchar_t)-1; } while(remain--) { if(!--size) { errno = EILSEQ; - return 0; + return (wchar_t)-1; } ch = *src++; if((ch & 0xC0) != 0x80) { errno = EILSEQ; - return 0; + return (wchar_t)-1; } ret <<= 6; ret |= ch & 0x3F; @@ -76,7 +76,7 @@ utf8_decode_char2(const char* src, size_t size, size_t* used) if(ret < min) { errno = EILSEQ; - return 0; + return (wchar_t)-1; } return ret; @@ -104,7 +104,7 @@ utf8_decode_char2_force(const char* src, size_t size, size_t* used, if(!src || !size) { errno = EINVAL; - return 0; + return (wchar_t)-1; } if(used) *used = 1; ch = *src++; @@ -143,7 +143,7 @@ utf8_decode_char2_force(const char* src, size_t size, size_t* used, ret |= ch & 0x3F; } - if(ch < min) goto ILSEQ; + if(ret < min) goto ILSEQ; return ret; } From 7e9085def4b9795b8df3b8c70caf14f42b9aeff5 Mon Sep 17 00:00:00 2001 From: Laurence Withers Date: Wed, 14 Oct 2009 15:27:52 +0000 Subject: [PATCH 3/7] Bump version --- src/libutf8/soversion | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libutf8/soversion b/src/libutf8/soversion index e1d9f1f..9627492 100644 --- a/src/libutf8/soversion +++ b/src/libutf8/soversion @@ -12,4 +12,4 @@ SOMAJOR=1 # SOMICRO is bumped every time there is a binary-compatible release. -SOMICRO=0 +SOMICRO=1 From 0275295c88be9c8fbf87546f4f49b8c3b0f94a4c Mon Sep 17 00:00:00 2001 From: Laurence Withers Date: Wed, 14 Oct 2009 15:27:52 +0000 Subject: [PATCH 4/7] Bump version --- version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version b/version index fc9751c..381bec4 100644 --- a/version +++ b/version @@ -11,7 +11,7 @@ # expected to be in 'major.minor.micro' format. VERMAJOR=1 VERMINOR=3 -VERMICRO=0 +VERMICRO=1 # kate: replace-trailing-space-save true; space-indent true; tab-width 4; # vim: expandtab:ts=4:sw=4:syntax=sh From 3cfd83e1a69a38bca040a1a9b99a3293c481ceb1 Mon Sep 17 00:00:00 2001 From: Laurence Withers Date: Tue, 3 Nov 2009 23:08:55 +0000 Subject: [PATCH 5/7] Fix potential null pointer dereference utf8_encoder() was incorrectly dereferencing the pointer `state' before testing it against null; fix by removing the variable initialisers. --- src/libutf8/500_encode_state.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/libutf8/500_encode_state.c b/src/libutf8/500_encode_state.c index ff76eba..3fe4946 100644 --- a/src/libutf8/500_encode_state.c +++ b/src/libutf8/500_encode_state.c @@ -10,8 +10,7 @@ struct utf8_encode_state* utf8_encoder(struct utf8_encode_state* state) { - char* wr = state->wr, * ret; - char* endp = wr + state->wr_size - 1; + char* wr, * ret, * endp; wchar_t ch; enum utf8_encode_error_action error_action; int reencoding; @@ -21,6 +20,9 @@ utf8_encoder(struct utf8_encode_state* state) return 0; } + wr = state->wr; + endp = wr + state->wr_size - 1; + state->written = 0; while(state->rd_remain) { ch = *state->rd; From 22d58219e7941598ad42ccfcce2fc53bf8b48928 Mon Sep 17 00:00:00 2001 From: Laurence Withers Date: Tue, 3 Nov 2009 23:10:15 +0000 Subject: [PATCH 6/7] Bump version --- src/libutf8/soversion | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libutf8/soversion b/src/libutf8/soversion index 9627492..52b6370 100644 --- a/src/libutf8/soversion +++ b/src/libutf8/soversion @@ -12,4 +12,4 @@ SOMAJOR=1 # SOMICRO is bumped every time there is a binary-compatible release. -SOMICRO=1 +SOMICRO=2 From f2462dbeab26047db150bd2649425fd2e42402e7 Mon Sep 17 00:00:00 2001 From: Laurence Withers Date: Tue, 3 Nov 2009 23:10:15 +0000 Subject: [PATCH 7/7] Bump version --- version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version b/version index 381bec4..7ba279b 100644 --- a/version +++ b/version @@ -11,7 +11,7 @@ # expected to be in 'major.minor.micro' format. VERMAJOR=1 VERMINOR=3 -VERMICRO=1 +VERMICRO=2 # kate: replace-trailing-space-save true; space-indent true; tab-width 4; # vim: expandtab:ts=4:sw=4:syntax=sh