Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:Maintenance:400
claws-mail.openSUSE_13.1_Update
claws-mail-dont-overshoot-output-buffer.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File claws-mail-dont-overshoot-output-buffer.patch of Package claws-mail.openSUSE_13.1_Update
X-Git-Url: http://git.claws-mail.org/?p=claws.git;a=blobdiff_plain;f=src%2Fcodeconv.c;h=d0fbf70da2cd4d8622ef07ada35252fd62a2e1e4;hp=f0ed61677072db919f235117263ac208132b26f6;hb=8b2aff884d97dcfe5cc70478fecc7c87ce023c95;hpb=fc42499ce0b3d1dc84914d5b15c9b5d19c904cd9 Index: claws-mail-3.12.0/src/codeconv.c =================================================================== --- claws-mail-3.12.0.orig/src/codeconv.c +++ claws-mail-3.12.0/src/codeconv.c @@ -155,10 +155,14 @@ void codeconv_set_strict(gboolean mode) static gint conv_jistoeuc(gchar *outbuf, gint outlen, const gchar *inbuf) { const guchar *in = inbuf; - guchar *out = outbuf; + gchar *out = outbuf; JISState state = JIS_ASCII; - while (*in != '\0') { + /* + * Loop outputs up to 3 bytes in each pass (aux kanji) and we + * need 1 byte to terminate the output + */ + while (*in != '\0' && (out - outbuf) < outlen - 4) { if (*in == ESC) { in++; if (*in == '$') { @@ -291,10 +295,15 @@ static gint conv_jis_hantozen(guchar *ou static gint conv_euctojis(gchar *outbuf, gint outlen, const gchar *inbuf) { const guchar *in = inbuf; - guchar *out = outbuf; + gchar *out = outbuf; JISState state = JIS_ASCII; - while (*in != '\0') { + /* + * Loop outputs up to 6 bytes in each pass (aux shift + aux + * kanji) and we need up to 4 bytes to terminate the output + * (ASCII shift + null) + */ + while (*in != '\0' && (out - outbuf) < outlen - 10) { if (IS_ASCII(*in)) { K_OUT(); *out++ = *in++; @@ -380,9 +389,13 @@ static gint conv_euctojis(gchar *outbuf, static gint conv_sjistoeuc(gchar *outbuf, gint outlen, const gchar *inbuf) { const guchar *in = inbuf; - guchar *out = outbuf; + gchar *out = outbuf; - while (*in != '\0') { + /* + * Loop outputs up to 2 bytes in each pass and we need 1 byte + * to terminate the output + */ + while (*in != '\0' && (out - outbuf) < outlen - 3) { if (IS_ASCII(*in)) { *out++ = *in++; } else if (issjiskanji1(*in)) {
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor