diff options
| author | Paul Eggert | 2012-07-10 14:48:34 -0700 |
|---|---|---|
| committer | Paul Eggert | 2012-07-10 14:48:34 -0700 |
| commit | e99a530f8cdca3ccd9e739cd092ed9865d12fe89 (patch) | |
| tree | c2bef9f80ff9910be17757a83f61caed02146d0a /lib-src | |
| parent | c59592b32f5b5808c12720bfd37ea73b473fa1db (diff) | |
| download | emacs-e99a530f8cdca3ccd9e739cd092ed9865d12fe89.tar.gz emacs-e99a530f8cdca3ccd9e739cd092ed9865d12fe89.zip | |
Simplify by avoiding confusing use of strncpy etc.
Diffstat (limited to 'lib-src')
| -rw-r--r-- | lib-src/ChangeLog | 19 | ||||
| -rw-r--r-- | lib-src/etags.c | 56 | ||||
| -rw-r--r-- | lib-src/make-docfile.c | 2 | ||||
| -rw-r--r-- | lib-src/movemail.c | 45 | ||||
| -rw-r--r-- | lib-src/pop.c | 73 |
5 files changed, 79 insertions, 116 deletions
diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index bc7c5d7114d..449985966a4 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog | |||
| @@ -1,3 +1,22 @@ | |||
| 1 | 2012-07-10 Paul Eggert <eggert@cs.ucla.edu> | ||
| 2 | |||
| 3 | Simplify by avoiding confusing use of strncpy etc. | ||
| 4 | * etags.c (write_classname, C_entries): | ||
| 5 | Use sprintf rather than strncpy or strncat. | ||
| 6 | * etags.c (consider_token, C_entries, HTML_labels, Prolog_functions) | ||
| 7 | (Erlang_functions, substitute, readline_internal, savenstr): | ||
| 8 | * movemail.c (mail_spool_name): | ||
| 9 | Use memcpy rather than strncpy or strncat when either will do. | ||
| 10 | * make-docfile.c (write_c_args): | ||
| 11 | Use memcmp rather than strncmp when either will do. | ||
| 12 | * movemail.c (pop_retr): | ||
| 13 | * pop.c (pop_stat, pop_list, pop_multi_first, pop_last) | ||
| 14 | (socket_connection, pop_getline, sendline, getok): | ||
| 15 | Use snprintf rather than strncpy or strncat. | ||
| 16 | * movemail.c (concat): Remove; no longer needed. | ||
| 17 | (xmalloc): Define only if needed, now that concat has gone away. | ||
| 18 | Return void *. All uses changed. | ||
| 19 | |||
| 1 | 2012-07-09 Paul Eggert <eggert@cs.ucla.edu> | 20 | 2012-07-09 Paul Eggert <eggert@cs.ucla.edu> |
| 2 | 21 | ||
| 3 | Add GCC-style 'const' attribute to functions that can use it. | 22 | Add GCC-style 'const' attribute to functions that can use it. |
diff --git a/lib-src/etags.c b/lib-src/etags.c index 7141811239f..69200b790fb 100644 --- a/lib-src/etags.c +++ b/lib-src/etags.c | |||
| @@ -2642,17 +2642,11 @@ write_classname (linebuffer *cn, const char *qualifier) | |||
| 2642 | } | 2642 | } |
| 2643 | for (i = 1; i < cstack.nl; i++) | 2643 | for (i = 1; i < cstack.nl; i++) |
| 2644 | { | 2644 | { |
| 2645 | char *s; | 2645 | char *s = cstack.cname[i]; |
| 2646 | int slen; | ||
| 2647 | |||
| 2648 | s = cstack.cname[i]; | ||
| 2649 | if (s == NULL) | 2646 | if (s == NULL) |
| 2650 | continue; | 2647 | continue; |
| 2651 | slen = strlen (s); | 2648 | linebuffer_setlen (cn, len + qlen + strlen (s)); |
| 2652 | len += slen + qlen; | 2649 | len += sprintf (cn->buffer + len, "%s%s", qualifier, s); |
| 2653 | linebuffer_setlen (cn, len); | ||
| 2654 | strncat (cn->buffer, qualifier, qlen); | ||
| 2655 | strncat (cn->buffer, s, slen); | ||
| 2656 | } | 2650 | } |
| 2657 | } | 2651 | } |
| 2658 | 2652 | ||
| @@ -2867,7 +2861,7 @@ consider_token (register char *str, register int len, register int c, int *c_ext | |||
| 2867 | fvdef = fvnone; | 2861 | fvdef = fvnone; |
| 2868 | objdef = omethodtag; | 2862 | objdef = omethodtag; |
| 2869 | linebuffer_setlen (&token_name, len); | 2863 | linebuffer_setlen (&token_name, len); |
| 2870 | strncpy (token_name.buffer, str, len); | 2864 | memcpy (token_name.buffer, str, len); |
| 2871 | token_name.buffer[len] = '\0'; | 2865 | token_name.buffer[len] = '\0'; |
| 2872 | return TRUE; | 2866 | return TRUE; |
| 2873 | } | 2867 | } |
| @@ -2879,10 +2873,11 @@ consider_token (register char *str, register int len, register int c, int *c_ext | |||
| 2879 | case omethodparm: | 2873 | case omethodparm: |
| 2880 | if (parlev == 0) | 2874 | if (parlev == 0) |
| 2881 | { | 2875 | { |
| 2876 | int oldlen = token_name.len; | ||
| 2882 | fvdef = fvnone; | 2877 | fvdef = fvnone; |
| 2883 | objdef = omethodtag; | 2878 | objdef = omethodtag; |
| 2884 | linebuffer_setlen (&token_name, token_name.len + len); | 2879 | linebuffer_setlen (&token_name, oldlen + len); |
| 2885 | strncat (token_name.buffer, str, len); | 2880 | memcpy (token_name.buffer + oldlen, str, len); |
| 2886 | return TRUE; | 2881 | return TRUE; |
| 2887 | } | 2882 | } |
| 2888 | return FALSE; | 2883 | return FALSE; |
| @@ -3311,12 +3306,12 @@ C_entries (int c_ext, FILE *inf) | |||
| 3311 | && nestlev > 0 && definedef == dnone) | 3306 | && nestlev > 0 && definedef == dnone) |
| 3312 | /* in struct body */ | 3307 | /* in struct body */ |
| 3313 | { | 3308 | { |
| 3309 | int len; | ||
| 3314 | write_classname (&token_name, qualifier); | 3310 | write_classname (&token_name, qualifier); |
| 3315 | linebuffer_setlen (&token_name, | 3311 | len = token_name.len; |
| 3316 | token_name.len+qlen+toklen); | 3312 | linebuffer_setlen (&token_name, len+qlen+toklen); |
| 3317 | strcat (token_name.buffer, qualifier); | 3313 | sprintf (token_name.buffer + len, "%s%.*s", |
| 3318 | strncat (token_name.buffer, | 3314 | qualifier, toklen, newlb.buffer + tokoff); |
| 3319 | newlb.buffer + tokoff, toklen); | ||
| 3320 | token.named = TRUE; | 3315 | token.named = TRUE; |
| 3321 | } | 3316 | } |
| 3322 | else if (objdef == ocatseen) | 3317 | else if (objdef == ocatseen) |
| @@ -3324,11 +3319,8 @@ C_entries (int c_ext, FILE *inf) | |||
| 3324 | { | 3319 | { |
| 3325 | int len = strlen (objtag) + 2 + toklen; | 3320 | int len = strlen (objtag) + 2 + toklen; |
| 3326 | linebuffer_setlen (&token_name, len); | 3321 | linebuffer_setlen (&token_name, len); |
| 3327 | strcpy (token_name.buffer, objtag); | 3322 | sprintf (token_name.buffer, "%s(%.*s)", |
| 3328 | strcat (token_name.buffer, "("); | 3323 | objtag, toklen, newlb.buffer + tokoff); |
| 3329 | strncat (token_name.buffer, | ||
| 3330 | newlb.buffer + tokoff, toklen); | ||
| 3331 | strcat (token_name.buffer, ")"); | ||
| 3332 | token.named = TRUE; | 3324 | token.named = TRUE; |
| 3333 | } | 3325 | } |
| 3334 | else if (objdef == omethodtag | 3326 | else if (objdef == omethodtag |
| @@ -3352,8 +3344,8 @@ C_entries (int c_ext, FILE *inf) | |||
| 3352 | len -= 1; | 3344 | len -= 1; |
| 3353 | } | 3345 | } |
| 3354 | linebuffer_setlen (&token_name, len); | 3346 | linebuffer_setlen (&token_name, len); |
| 3355 | strncpy (token_name.buffer, | 3347 | memcpy (token_name.buffer, |
| 3356 | newlb.buffer + off, len); | 3348 | newlb.buffer + off, len); |
| 3357 | token_name.buffer[len] = '\0'; | 3349 | token_name.buffer[len] = '\0'; |
| 3358 | if (defun) | 3350 | if (defun) |
| 3359 | while (--len >= 0) | 3351 | while (--len >= 0) |
| @@ -3364,8 +3356,8 @@ C_entries (int c_ext, FILE *inf) | |||
| 3364 | else | 3356 | else |
| 3365 | { | 3357 | { |
| 3366 | linebuffer_setlen (&token_name, toklen); | 3358 | linebuffer_setlen (&token_name, toklen); |
| 3367 | strncpy (token_name.buffer, | 3359 | memcpy (token_name.buffer, |
| 3368 | newlb.buffer + tokoff, toklen); | 3360 | newlb.buffer + tokoff, toklen); |
| 3369 | token_name.buffer[toklen] = '\0'; | 3361 | token_name.buffer[toklen] = '\0'; |
| 3370 | /* Name macros and members. */ | 3362 | /* Name macros and members. */ |
| 3371 | token.named = (structdef == stagseen | 3363 | token.named = (structdef == stagseen |
| @@ -5161,7 +5153,7 @@ HTML_labels (FILE *inf) | |||
| 5161 | for (end = dbp; *end != '\0' && intoken (*end); end++) | 5153 | for (end = dbp; *end != '\0' && intoken (*end); end++) |
| 5162 | continue; | 5154 | continue; |
| 5163 | linebuffer_setlen (&token_name, end - dbp); | 5155 | linebuffer_setlen (&token_name, end - dbp); |
| 5164 | strncpy (token_name.buffer, dbp, end - dbp); | 5156 | memcpy (token_name.buffer, dbp, end - dbp); |
| 5165 | token_name.buffer[end - dbp] = '\0'; | 5157 | token_name.buffer[end - dbp] = '\0'; |
| 5166 | 5158 | ||
| 5167 | dbp = end; | 5159 | dbp = end; |
| @@ -5261,7 +5253,7 @@ Prolog_functions (FILE *inf) | |||
| 5261 | else if (len + 1 > allocated) | 5253 | else if (len + 1 > allocated) |
| 5262 | xrnew (last, len + 1, char); | 5254 | xrnew (last, len + 1, char); |
| 5263 | allocated = len + 1; | 5255 | allocated = len + 1; |
| 5264 | strncpy (last, cp, len); | 5256 | memcpy (last, cp, len); |
| 5265 | last[len] = '\0'; | 5257 | last[len] = '\0'; |
| 5266 | } | 5258 | } |
| 5267 | } | 5259 | } |
| @@ -5434,7 +5426,7 @@ Erlang_functions (FILE *inf) | |||
| 5434 | else if (len + 1 > allocated) | 5426 | else if (len + 1 > allocated) |
| 5435 | xrnew (last, len + 1, char); | 5427 | xrnew (last, len + 1, char); |
| 5436 | allocated = len + 1; | 5428 | allocated = len + 1; |
| 5437 | strncpy (last, cp, len); | 5429 | memcpy (last, cp, len); |
| 5438 | last[len] = '\0'; | 5430 | last[len] = '\0'; |
| 5439 | } | 5431 | } |
| 5440 | } | 5432 | } |
| @@ -5817,7 +5809,7 @@ substitute (char *in, char *out, struct re_registers *regs) | |||
| 5817 | { | 5809 | { |
| 5818 | dig = *out - '0'; | 5810 | dig = *out - '0'; |
| 5819 | diglen = regs->end[dig] - regs->start[dig]; | 5811 | diglen = regs->end[dig] - regs->start[dig]; |
| 5820 | strncpy (t, in + regs->start[dig], diglen); | 5812 | memcpy (t, in + regs->start[dig], diglen); |
| 5821 | t += diglen; | 5813 | t += diglen; |
| 5822 | } | 5814 | } |
| 5823 | else | 5815 | else |
| @@ -6040,7 +6032,7 @@ readline_internal (linebuffer *lbp, register FILE *stream) | |||
| 6040 | filebuf.size *= 2; | 6032 | filebuf.size *= 2; |
| 6041 | xrnew (filebuf.buffer, filebuf.size, char); | 6033 | xrnew (filebuf.buffer, filebuf.size, char); |
| 6042 | } | 6034 | } |
| 6043 | strncpy (filebuf.buffer + filebuf.len, lbp->buffer, lbp->len); | 6035 | memcpy (filebuf.buffer + filebuf.len, lbp->buffer, lbp->len); |
| 6044 | filebuf.len += lbp->len; | 6036 | filebuf.len += lbp->len; |
| 6045 | filebuf.buffer[filebuf.len++] = '\n'; | 6037 | filebuf.buffer[filebuf.len++] = '\n'; |
| 6046 | filebuf.buffer[filebuf.len] = '\0'; | 6038 | filebuf.buffer[filebuf.len] = '\0'; |
| @@ -6263,7 +6255,7 @@ savenstr (const char *cp, int len) | |||
| 6263 | register char *dp; | 6255 | register char *dp; |
| 6264 | 6256 | ||
| 6265 | dp = xnew (len + 1, char); | 6257 | dp = xnew (len + 1, char); |
| 6266 | strncpy (dp, cp, len); | 6258 | memcpy (dp, cp, len); |
| 6267 | dp[len] = '\0'; | 6259 | dp[len] = '\0'; |
| 6268 | return dp; | 6260 | return dp; |
| 6269 | } | 6261 | } |
diff --git a/lib-src/make-docfile.c b/lib-src/make-docfile.c index 99c43da97f5..bd87b5b6524 100644 --- a/lib-src/make-docfile.c +++ b/lib-src/make-docfile.c | |||
| @@ -541,7 +541,7 @@ write_c_args (FILE *out, char *func, char *buf, int minargs, int maxargs) | |||
| 541 | 541 | ||
| 542 | /* In C code, `default' is a reserved word, so we spell it | 542 | /* In C code, `default' is a reserved word, so we spell it |
| 543 | `defalt'; demangle that here. */ | 543 | `defalt'; demangle that here. */ |
| 544 | if (ident_length == 6 && strncmp (ident_start, "defalt", 6) == 0) | 544 | if (ident_length == 6 && memcmp (ident_start, "defalt", 6) == 0) |
| 545 | fprintf (out, "DEFAULT"); | 545 | fprintf (out, "DEFAULT"); |
| 546 | else | 546 | else |
| 547 | while (ident_length-- > 0) | 547 | while (ident_length-- > 0) |
diff --git a/lib-src/movemail.c b/lib-src/movemail.c index 3d994ec5a5e..b9a1be8a7f1 100644 --- a/lib-src/movemail.c +++ b/lib-src/movemail.c | |||
| @@ -141,8 +141,9 @@ static _Noreturn void fatal (const char *s1, const char *s2, const char *s3); | |||
| 141 | static void error (const char *s1, const char *s2, const char *s3); | 141 | static void error (const char *s1, const char *s2, const char *s3); |
| 142 | static _Noreturn void pfatal_with_name (char *name); | 142 | static _Noreturn void pfatal_with_name (char *name); |
| 143 | static _Noreturn void pfatal_and_delete (char *name); | 143 | static _Noreturn void pfatal_and_delete (char *name); |
| 144 | static char *concat (const char *s1, const char *s2, const char *s3); | 144 | #ifdef MAIL_USE_MAILLOCK |
| 145 | static long *xmalloc (unsigned int size); | 145 | static void *xmalloc (size_t size); |
| 146 | #endif | ||
| 146 | #ifdef MAIL_USE_POP | 147 | #ifdef MAIL_USE_POP |
| 147 | static int popmail (char *mailbox, char *outfile, int preserve, char *password, int reverse_order); | 148 | static int popmail (char *mailbox, char *outfile, int preserve, char *password, int reverse_order); |
| 148 | static int pop_retr (popserver server, int msgno, FILE *arg); | 149 | static int pop_retr (popserver server, int msgno, FILE *arg); |
| @@ -301,7 +302,7 @@ main (int argc, char **argv) | |||
| 301 | inname_dirlen && !IS_DIRECTORY_SEP (inname[inname_dirlen - 1]); | 302 | inname_dirlen && !IS_DIRECTORY_SEP (inname[inname_dirlen - 1]); |
| 302 | inname_dirlen--) | 303 | inname_dirlen--) |
| 303 | continue; | 304 | continue; |
| 304 | tempname = (char *) xmalloc (inname_dirlen + sizeof "EXXXXXX"); | 305 | tempname = xmalloc (inname_dirlen + sizeof "EXXXXXX"); |
| 305 | 306 | ||
| 306 | while (1) | 307 | while (1) |
| 307 | { | 308 | { |
| @@ -583,8 +584,8 @@ mail_spool_name (char *inname) | |||
| 583 | if (stat (MAILDIR, &stat1) < 0) | 584 | if (stat (MAILDIR, &stat1) < 0) |
| 584 | return NULL; | 585 | return NULL; |
| 585 | 586 | ||
| 586 | indir = (char *) xmalloc (fname - inname + 1); | 587 | indir = xmalloc (fname - inname + 1); |
| 587 | strncpy (indir, inname, fname - inname); | 588 | memcpy (indir, inname, fname - inname); |
| 588 | indir[fname-inname] = '\0'; | 589 | indir[fname-inname] = '\0'; |
| 589 | 590 | ||
| 590 | 591 | ||
| @@ -644,32 +645,18 @@ pfatal_and_delete (char *name) | |||
| 644 | fatal ("%s for %s", s, name); | 645 | fatal ("%s for %s", s, name); |
| 645 | } | 646 | } |
| 646 | 647 | ||
| 647 | /* Return a newly-allocated string whose contents concatenate those of s1, s2, s3. */ | 648 | #ifdef MAIL_USE_MAILLOCK |
| 648 | |||
| 649 | static char * | ||
| 650 | concat (const char *s1, const char *s2, const char *s3) | ||
| 651 | { | ||
| 652 | size_t len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3); | ||
| 653 | char *result = (char *) xmalloc (len1 + len2 + len3 + 1); | ||
| 654 | |||
| 655 | strcpy (result, s1); | ||
| 656 | strcpy (result + len1, s2); | ||
| 657 | strcpy (result + len1 + len2, s3); | ||
| 658 | *(result + len1 + len2 + len3) = 0; | ||
| 659 | |||
| 660 | return result; | ||
| 661 | } | ||
| 662 | |||
| 663 | /* Like malloc but get fatal error if memory is exhausted. */ | 649 | /* Like malloc but get fatal error if memory is exhausted. */ |
| 664 | 650 | ||
| 665 | static long * | 651 | static void * |
| 666 | xmalloc (unsigned int size) | 652 | xmalloc (size_t size) |
| 667 | { | 653 | { |
| 668 | long *result = (long *) malloc (size); | 654 | void *result = malloc (size); |
| 669 | if (!result) | 655 | if (!result) |
| 670 | fatal ("virtual memory exhausted", 0, 0); | 656 | fatal ("virtual memory exhausted", 0, 0); |
| 671 | return result; | 657 | return result; |
| 672 | } | 658 | } |
| 659 | #endif | ||
| 673 | 660 | ||
| 674 | /* This is the guts of the interface to the Post Office Protocol. */ | 661 | /* This is the guts of the interface to the Post Office Protocol. */ |
| 675 | 662 | ||
| @@ -851,10 +838,7 @@ pop_retr (popserver server, int msgno, FILE *arg) | |||
| 851 | 838 | ||
| 852 | if (pop_retrieve_first (server, msgno, &line)) | 839 | if (pop_retrieve_first (server, msgno, &line)) |
| 853 | { | 840 | { |
| 854 | char *msg = concat ("Error from POP server: ", pop_error, ""); | 841 | snprintf (Errmsg, sizeof Errmsg, "Error from POP server: %s", pop_error); |
| 855 | strncpy (Errmsg, msg, sizeof (Errmsg)); | ||
| 856 | Errmsg[sizeof (Errmsg)-1] = '\0'; | ||
| 857 | free (msg); | ||
| 858 | return (NOTOK); | 842 | return (NOTOK); |
| 859 | } | 843 | } |
| 860 | 844 | ||
| @@ -873,10 +857,7 @@ pop_retr (popserver server, int msgno, FILE *arg) | |||
| 873 | 857 | ||
| 874 | if (ret) | 858 | if (ret) |
| 875 | { | 859 | { |
| 876 | char *msg = concat ("Error from POP server: ", pop_error, ""); | 860 | snprintf (Errmsg, sizeof Errmsg, "Error from POP server: %s", pop_error); |
| 877 | strncpy (Errmsg, msg, sizeof (Errmsg)); | ||
| 878 | Errmsg[sizeof (Errmsg)-1] = '\0'; | ||
| 879 | free (msg); | ||
| 880 | return (NOTOK); | 861 | return (NOTOK); |
| 881 | } | 862 | } |
| 882 | 863 | ||
diff --git a/lib-src/pop.c b/lib-src/pop.c index b8ed65c3eac..74054e0e1b1 100644 --- a/lib-src/pop.c +++ b/lib-src/pop.c | |||
| @@ -340,10 +340,7 @@ pop_stat (popserver server, int *count, int *size) | |||
| 340 | if (strncmp (fromserver, "+OK ", 4)) | 340 | if (strncmp (fromserver, "+OK ", 4)) |
| 341 | { | 341 | { |
| 342 | if (0 == strncmp (fromserver, "-ERR", 4)) | 342 | if (0 == strncmp (fromserver, "-ERR", 4)) |
| 343 | { | 343 | snprintf (pop_error, ERROR_MAX, "%s", fromserver); |
| 344 | strncpy (pop_error, fromserver, ERROR_MAX); | ||
| 345 | pop_error[ERROR_MAX-1] = '\0'; | ||
| 346 | } | ||
| 347 | else | 344 | else |
| 348 | { | 345 | { |
| 349 | strcpy (pop_error, | 346 | strcpy (pop_error, |
| @@ -444,10 +441,7 @@ pop_list (popserver server, int message, int **IDs, int **sizes) | |||
| 444 | if (strncmp (fromserver, "+OK ", 4)) | 441 | if (strncmp (fromserver, "+OK ", 4)) |
| 445 | { | 442 | { |
| 446 | if (! strncmp (fromserver, "-ERR", 4)) | 443 | if (! strncmp (fromserver, "-ERR", 4)) |
| 447 | { | 444 | snprintf (pop_error, ERROR_MAX, "%s", fromserver); |
| 448 | strncpy (pop_error, fromserver, ERROR_MAX); | ||
| 449 | pop_error[ERROR_MAX-1] = '\0'; | ||
| 450 | } | ||
| 451 | else | 445 | else |
| 452 | { | 446 | { |
| 453 | strcpy (pop_error, | 447 | strcpy (pop_error, |
| @@ -686,8 +680,7 @@ pop_multi_first (popserver server, const char *command, char **response) | |||
| 686 | 680 | ||
| 687 | if (0 == strncmp (*response, "-ERR", 4)) | 681 | if (0 == strncmp (*response, "-ERR", 4)) |
| 688 | { | 682 | { |
| 689 | strncpy (pop_error, *response, ERROR_MAX); | 683 | snprintf (pop_error, ERROR_MAX, "%s", *response); |
| 690 | pop_error[ERROR_MAX-1] = '\0'; | ||
| 691 | return (-1); | 684 | return (-1); |
| 692 | } | 685 | } |
| 693 | else if (0 == strncmp (*response, "+OK", 3)) | 686 | else if (0 == strncmp (*response, "+OK", 3)) |
| @@ -860,8 +853,7 @@ pop_last (popserver server) | |||
| 860 | 853 | ||
| 861 | if (! strncmp (fromserver, "-ERR", 4)) | 854 | if (! strncmp (fromserver, "-ERR", 4)) |
| 862 | { | 855 | { |
| 863 | strncpy (pop_error, fromserver, ERROR_MAX); | 856 | snprintf (pop_error, ERROR_MAX, "%s", fromserver); |
| 864 | pop_error[ERROR_MAX-1] = '\0'; | ||
| 865 | return (-1); | 857 | return (-1); |
| 866 | } | 858 | } |
| 867 | else if (strncmp (fromserver, "+OK ", 4)) | 859 | else if (strncmp (fromserver, "+OK ", 4)) |
| @@ -1061,9 +1053,8 @@ socket_connection (char *host, int flags) | |||
| 1061 | sock = socket (PF_INET, SOCK_STREAM, 0); | 1053 | sock = socket (PF_INET, SOCK_STREAM, 0); |
| 1062 | if (sock < 0) | 1054 | if (sock < 0) |
| 1063 | { | 1055 | { |
| 1064 | strcpy (pop_error, POP_SOCKET_ERROR); | 1056 | snprintf (pop_error, ERROR_MAX, "%s%s", |
| 1065 | strncat (pop_error, strerror (errno), | 1057 | POP_SOCKET_ERROR, strerror (errno)); |
| 1066 | ERROR_MAX - sizeof (POP_SOCKET_ERROR)); | ||
| 1067 | return (-1); | 1058 | return (-1); |
| 1068 | 1059 | ||
| 1069 | } | 1060 | } |
| @@ -1139,9 +1130,7 @@ socket_connection (char *host, int flags) | |||
| 1139 | if (! connect_ok) | 1130 | if (! connect_ok) |
| 1140 | { | 1131 | { |
| 1141 | CLOSESOCKET (sock); | 1132 | CLOSESOCKET (sock); |
| 1142 | strcpy (pop_error, CONNECT_ERROR); | 1133 | snprintf (pop_error, ERROR_MAX, "%s%s", CONNECT_ERROR, strerror (errno)); |
| 1143 | strncat (pop_error, strerror (errno), | ||
| 1144 | ERROR_MAX - sizeof (CONNECT_ERROR)); | ||
| 1145 | return (-1); | 1134 | return (-1); |
| 1146 | 1135 | ||
| 1147 | } | 1136 | } |
| @@ -1159,9 +1148,8 @@ socket_connection (char *host, int flags) | |||
| 1159 | krb5_auth_con_free (kcontext, auth_context); | 1148 | krb5_auth_con_free (kcontext, auth_context); |
| 1160 | if (kcontext) | 1149 | if (kcontext) |
| 1161 | krb5_free_context (kcontext); | 1150 | krb5_free_context (kcontext); |
| 1162 | strcpy (pop_error, KRB_ERROR); | 1151 | snprintf (pop_error, ERROR_MAX, "%s%s", |
| 1163 | strncat (pop_error, error_message (rem), | 1152 | KRB_ERROR, error_message (rem)); |
| 1164 | ERROR_MAX - sizeof (KRB_ERROR)); | ||
| 1165 | CLOSESOCKET (sock); | 1153 | CLOSESOCKET (sock); |
| 1166 | return (-1); | 1154 | return (-1); |
| 1167 | } | 1155 | } |
| @@ -1199,30 +1187,19 @@ socket_connection (char *host, int flags) | |||
| 1199 | krb5_free_principal (kcontext, server); | 1187 | krb5_free_principal (kcontext, server); |
| 1200 | if (rem) | 1188 | if (rem) |
| 1201 | { | 1189 | { |
| 1202 | strcpy (pop_error, KRB_ERROR); | 1190 | int pop_error_len = snprintf (pop_error, ERROR_MAX, "%s%s", |
| 1203 | strncat (pop_error, error_message (rem), | 1191 | KRB_ERROR, error_message (rem)); |
| 1204 | ERROR_MAX - sizeof (KRB_ERROR)); | ||
| 1205 | #if defined HAVE_KRB5_ERROR_TEXT | 1192 | #if defined HAVE_KRB5_ERROR_TEXT |
| 1206 | if (err_ret && err_ret->text.length) | 1193 | if (err_ret && err_ret->text.length) |
| 1207 | { | 1194 | { |
| 1208 | strncat (pop_error, " [server says '", | 1195 | int errlen = err_ret->text.length; |
| 1209 | ERROR_MAX - strlen (pop_error) - 1); | 1196 | snprintf (pop_error + pop_error_len, ERROR_MAX - pop_error_len, |
| 1210 | strncat (pop_error, err_ret->text.data, | 1197 | " [server says '.*%s']", errlen, err_ret->text.data); |
| 1211 | min (ERROR_MAX - strlen (pop_error) - 1, | ||
| 1212 | err_ret->text.length)); | ||
| 1213 | strncat (pop_error, "']", | ||
| 1214 | ERROR_MAX - strlen (pop_error) - 1); | ||
| 1215 | } | 1198 | } |
| 1216 | #elif defined HAVE_KRB5_ERROR_E_TEXT | 1199 | #elif defined HAVE_KRB5_ERROR_E_TEXT |
| 1217 | if (err_ret && err_ret->e_text && strlen (*err_ret->e_text)) | 1200 | if (err_ret && err_ret->e_text && **err_ret->e_text) |
| 1218 | { | 1201 | snprintf (pop_error + pop_error_len, ERRMAX - pop_error_len, |
| 1219 | strncat (pop_error, " [server says '", | 1202 | " [server says '%s']", *err_ret->e_text); |
| 1220 | ERROR_MAX - strlen (pop_error) - 1); | ||
| 1221 | strncat (pop_error, *err_ret->e_text, | ||
| 1222 | ERROR_MAX - strlen (pop_error) - 1); | ||
| 1223 | strncat (pop_error, "']", | ||
| 1224 | ERROR_MAX - strlen (pop_error) - 1); | ||
| 1225 | } | ||
| 1226 | #endif | 1203 | #endif |
| 1227 | if (err_ret) | 1204 | if (err_ret) |
| 1228 | krb5_free_error (kcontext, err_ret); | 1205 | krb5_free_error (kcontext, err_ret); |
| @@ -1243,9 +1220,7 @@ socket_connection (char *host, int flags) | |||
| 1243 | free ((char *) ticket); | 1220 | free ((char *) ticket); |
| 1244 | if (rem != KSUCCESS) | 1221 | if (rem != KSUCCESS) |
| 1245 | { | 1222 | { |
| 1246 | strcpy (pop_error, KRB_ERROR); | 1223 | snprintf (pop_error, ERROR_MAX, "%s%s", KRB_ERROR, krb_err_txt[rem]); |
| 1247 | strncat (pop_error, krb_err_txt[rem], | ||
| 1248 | ERROR_MAX - sizeof (KRB_ERROR)); | ||
| 1249 | CLOSESOCKET (sock); | 1224 | CLOSESOCKET (sock); |
| 1250 | return (-1); | 1225 | return (-1); |
| 1251 | } | 1226 | } |
| @@ -1350,9 +1325,8 @@ pop_getline (popserver server, char **line) | |||
| 1350 | server->buffer_size - server->data - 1, 0); | 1325 | server->buffer_size - server->data - 1, 0); |
| 1351 | if (ret < 0) | 1326 | if (ret < 0) |
| 1352 | { | 1327 | { |
| 1353 | strcpy (pop_error, GETLINE_ERROR); | 1328 | snprintf (pop_error, ERROR_MAX, "%s%s", |
| 1354 | strncat (pop_error, strerror (errno), | 1329 | GETLINE_ERROR, strerror (errno)); |
| 1355 | ERROR_MAX - sizeof (GETLINE_ERROR)); | ||
| 1356 | pop_trash (server); | 1330 | pop_trash (server); |
| 1357 | return (-1); | 1331 | return (-1); |
| 1358 | } | 1332 | } |
| @@ -1436,9 +1410,7 @@ sendline (popserver server, const char *line) | |||
| 1436 | if (ret < 0) | 1410 | if (ret < 0) |
| 1437 | { | 1411 | { |
| 1438 | pop_trash (server); | 1412 | pop_trash (server); |
| 1439 | strcpy (pop_error, SENDLINE_ERROR); | 1413 | snprintf (pop_error, ERROR_MAX, "%s%s", SENDLINE_ERROR, strerror (errno)); |
| 1440 | strncat (pop_error, strerror (errno), | ||
| 1441 | ERROR_MAX - sizeof (SENDLINE_ERROR)); | ||
| 1442 | return (ret); | 1414 | return (ret); |
| 1443 | } | 1415 | } |
| 1444 | 1416 | ||
| @@ -1500,8 +1472,7 @@ getok (popserver server) | |||
| 1500 | return (0); | 1472 | return (0); |
| 1501 | else if (! strncmp (fromline, "-ERR", 4)) | 1473 | else if (! strncmp (fromline, "-ERR", 4)) |
| 1502 | { | 1474 | { |
| 1503 | strncpy (pop_error, fromline, ERROR_MAX); | 1475 | snprintf (pop_error, ERROR_MAX, "%s", fromline); |
| 1504 | pop_error[ERROR_MAX-1] = '\0'; | ||
| 1505 | return (-1); | 1476 | return (-1); |
| 1506 | } | 1477 | } |
| 1507 | else | 1478 | else |