annotate src/chomp.c @ 753:b58fd7980358

Fix theoretically possible memory corruption by chomp() A quick survey of callers of chomp() suggests this never could occur in practice
author Ben Schmidt
date Wed, 06 Oct 2010 23:26:26 +1100
parents 9935bcc6fc36
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
21ce01de8109 Initial revision
mmj
parents:
diff changeset
1 /* Copyright (C) 2002, 2003 Mads Martin Joergensen <mmj at mmj.dk>
21ce01de8109 Initial revision
mmj
parents:
diff changeset
2 *
21ce01de8109 Initial revision
mmj
parents:
diff changeset
3 * $Id$
21ce01de8109 Initial revision
mmj
parents:
diff changeset
4 *
225
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 0
diff changeset
5 * Permission is hereby granted, free of charge, to any person obtaining a copy
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 0
diff changeset
6 * of this software and associated documentation files (the "Software"), to
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 0
diff changeset
7 * deal in the Software without restriction, including without limitation the
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 0
diff changeset
8 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 0
diff changeset
9 * sell copies of the Software, and to permit persons to whom the Software is
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 0
diff changeset
10 * furnished to do so, subject to the following conditions:
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 0
diff changeset
11 *
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 0
diff changeset
12 * The above copyright notice and this permission notice shall be included in
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 0
diff changeset
13 * all copies or substantial portions of the Software.
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 0
diff changeset
14 *
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 0
diff changeset
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 0
diff changeset
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 0
diff changeset
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 0
diff changeset
18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 0
diff changeset
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 0
diff changeset
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
3f177909efc8 Goodbye GPL license, Welcome MIT
mmj
parents: 0
diff changeset
21 * IN THE SOFTWARE.
0
21ce01de8109 Initial revision
mmj
parents:
diff changeset
22 */
21ce01de8109 Initial revision
mmj
parents:
diff changeset
23
21ce01de8109 Initial revision
mmj
parents:
diff changeset
24 #include <string.h>
21ce01de8109 Initial revision
mmj
parents:
diff changeset
25 #include "chomp.h"
21ce01de8109 Initial revision
mmj
parents:
diff changeset
26
21ce01de8109 Initial revision
mmj
parents:
diff changeset
27 char *chomp(char *str)
21ce01de8109 Initial revision
mmj
parents:
diff changeset
28 {
291
7da5c55b9330 0.8.3 commit
mmj
parents: 225
diff changeset
29 size_t i;
7da5c55b9330 0.8.3 commit
mmj
parents: 225
diff changeset
30
7da5c55b9330 0.8.3 commit
mmj
parents: 225
diff changeset
31 if(str == NULL)
7da5c55b9330 0.8.3 commit
mmj
parents: 225
diff changeset
32 return NULL;
7da5c55b9330 0.8.3 commit
mmj
parents: 225
diff changeset
33
753
b58fd7980358 Fix theoretically possible memory corruption by chomp()
Ben Schmidt
parents: 583
diff changeset
34 if(*str == '\0' || *str == '\n' || *str == '\r') {
540
2f374935d20c Small fix for chomp
mmj
parents: 291
diff changeset
35 *str = '\0';
2f374935d20c Small fix for chomp
mmj
parents: 291
diff changeset
36 return str;
2f374935d20c Small fix for chomp
mmj
parents: 291
diff changeset
37 }
2f374935d20c Small fix for chomp
mmj
parents: 291
diff changeset
38
291
7da5c55b9330 0.8.3 commit
mmj
parents: 225
diff changeset
39 i = strlen(str) - 1;
0
21ce01de8109 Initial revision
mmj
parents:
diff changeset
40
583
9935bcc6fc36 Changed chomp() to also remove CR from CRLF sequences
mortenp
parents: 540
diff changeset
41 while((str[i] == '\n') || (str[i] == '\r')) {
0
21ce01de8109 Initial revision
mmj
parents:
diff changeset
42 str[i] = 0;
21ce01de8109 Initial revision
mmj
parents:
diff changeset
43 i--;
21ce01de8109 Initial revision
mmj
parents:
diff changeset
44 }
21ce01de8109 Initial revision
mmj
parents:
diff changeset
45
21ce01de8109 Initial revision
mmj
parents:
diff changeset
46 return str;
21ce01de8109 Initial revision
mmj
parents:
diff changeset
47 }