49cb564d14
* par is kept at -Np0 ```sh git grep -l '^patch_args=-Np0' "srcpkgs/$1*/template" | while read template; do for p in ${template%/template}/patches/*; do sed -i ' \,^[+-][+-][+-] /dev/null,b /^[*-]\+ [0-9]\+\(,[0-9]\+\)\? [*-]\+$/b s,^[*][*][*] ,&a/, /^--- /{ s,\(^--- \)\(./\)*,\1a/, s,[.-][Oo][Rr][Ii][Gg]\([ /]\),\1, s/[.-][Oo][Rr][Ii][Gg]$// s/[.]patched[.]\([^.]\)/.\1/ h } /^+++ -/{ g s/^--- a/+++ b/ b } s,\(^+++ \)\(./\)*,\1b/, ' "$p" done sed -i '/^patch_args=/d' $template done ```
105 lines
2 KiB
Diff
105 lines
2 KiB
Diff
The iconv() functions to convert to and from Pilot charset pass
|
|
a const char* as the source text, but iconv() expects a char**.
|
|
Create a local copy of the const char* and use that.
|
|
Also add sanity checks to avoid dereferencing NULL pointers.
|
|
|
|
--- a/libpisync/util.c 2006-08-25 14:33:25.000000000 +0200
|
|
+++ b/libpisync/util.c 2016-12-20 14:55:18.996691848 +0100
|
|
@@ -104,24 +104,44 @@
|
|
int bytes, char **ptext, const char * pi_charset)
|
|
{
|
|
#ifdef HAVE_ICONV
|
|
+ char* ib;
|
|
char* ob;
|
|
iconv_t cd;
|
|
- size_t ibl, obl;
|
|
+ size_t tbl, ibl, obl;
|
|
+
|
|
+ if(NULL==text){
|
|
+ return -1;
|
|
+ }
|
|
+ tbl = strlen(text) + 1;
|
|
+ ib = calloc(tbl, sizeof(char));
|
|
+ if(NULL==ib){
|
|
+ return -1;
|
|
+ }
|
|
+ memcpy(ib, text, tbl);
|
|
|
|
if(NULL==pi_charset){
|
|
pi_charset = PILOT_CHARSET;
|
|
}
|
|
-
|
|
cd = iconv_open(pi_charset, charset);
|
|
- if (cd==(iconv_t)-1)
|
|
+ if (cd==(iconv_t)-1) {
|
|
+ free(ib);
|
|
return -1;
|
|
+ }
|
|
|
|
ibl = bytes;
|
|
obl = bytes * 4 + 1;
|
|
*ptext = ob = malloc(obl);
|
|
+ if(NULL==ob){
|
|
+ free(ib);
|
|
+ return -1;
|
|
+ }
|
|
|
|
- if (iconv(cd, &text, &ibl, &ob, &obl) == (size_t)-1)
|
|
+ if (iconv(cd, &ib, &ibl, &ob, &obl) == (size_t)-1) {
|
|
+ free(ib);
|
|
+ free(ob);
|
|
return -1;
|
|
+ }
|
|
+ free(ib);
|
|
*ob = '\0';
|
|
|
|
iconv_close(cd);
|
|
@@ -195,24 +215,44 @@
|
|
int bytes, char **text, const char * pi_charset)
|
|
{
|
|
#ifdef HAVE_ICONV
|
|
+ char* ib;
|
|
char* ob;
|
|
iconv_t cd;
|
|
- size_t ibl, obl;
|
|
+ size_t tbl, ibl, obl;
|
|
+
|
|
+ if(NULL==ptext){
|
|
+ return -1;
|
|
+ }
|
|
+ tbl = strlen(ptext) + 1;
|
|
+ ib = calloc(tbl, sizeof(char));
|
|
+ if(NULL==ib){
|
|
+ return -1;
|
|
+ }
|
|
+ memcpy(ib, ptext, tbl);
|
|
|
|
if(NULL==pi_charset){
|
|
pi_charset = PILOT_CHARSET;
|
|
}
|
|
-
|
|
cd = iconv_open(charset, pi_charset);
|
|
- if (cd==(iconv_t)-1)
|
|
+ if (cd==(iconv_t)-1) {
|
|
+ free(ib);
|
|
return -1;
|
|
+ }
|
|
|
|
ibl = bytes;
|
|
obl = bytes * 4 + 1;
|
|
*text = ob = malloc(obl);
|
|
+ if(NULL==ob){
|
|
+ free(ib);
|
|
+ return -1;
|
|
+ }
|
|
|
|
- if (iconv(cd, &ptext, &ibl, &ob, &obl) == (size_t)-1)
|
|
+ if (iconv(cd, &ib, &ibl, &ob, &obl) == (size_t)-1) {
|
|
+ free(ib);
|
|
+ free(ob);
|
|
return -1;
|
|
+ }
|
|
+ free(ib);
|
|
*ob = '\0';
|
|
|
|
iconv_close(cd);
|