svn commit: r311109 - head/usr.bin/patch
Conrad Meyer
cem at freebsd.org
Mon Jan 2 18:34:56 UTC 2017
IMO this patch was mostly fine, you just need to restrict line length
to UINT32_MAX/2 instead of UINT_MAX (== UINT32_MAX) for 32-bit
platforms.
Best,
Conrad
On Mon, Jan 2, 2017 at 10:23 AM, Pedro F. Giffuni <pfg at freebsd.org> wrote:
> Author: pfg
> Date: Mon Jan 2 18:23:31 2017
> New Revision: 311109
> URL: https://svnweb.freebsd.org/changeset/base/311109
>
> Log:
> Revert r311106:
> patch(1): extend the maximum length of a line from USHRT_MAX to UINT_MAX.
>
> This doesn't really work for 32 bit platforms.
>
> Pointed out by: kib
>
> Modified:
> head/usr.bin/patch/patch.c
> head/usr.bin/patch/pch.c
> head/usr.bin/patch/pch.h
>
> Modified: head/usr.bin/patch/patch.c
> ==============================================================================
> --- head/usr.bin/patch/patch.c Mon Jan 2 18:20:22 2017 (r311108)
> +++ head/usr.bin/patch/patch.c Mon Jan 2 18:23:31 2017 (r311109)
> @@ -749,13 +749,15 @@ rej_line(int ch, LINENUM i)
> size_t len;
> const char *line = pfetch(i);
>
> - len = strnlen(line, UINT_MAX);
> + len = strnlen(line, USHRT_MAX);
>
> fprintf(rejfp, "%c%s", ch, line);
> - if (len == 0 || line[len-1] != '\n')
> - fprintf(rejfp, "\n\\ No newline at end of line\n");
> - else if (len >= UINT_MAX)
> - fprintf(rejfp, "\n\\ Line too long\n");
> + if (len == 0 || line[len-1] != '\n') {
> + if (len >= USHRT_MAX)
> + fprintf(rejfp, "\n\\ Line too long\n");
> + else
> + fprintf(rejfp, "\n\\ No newline at end of line\n");
> + }
> }
>
> static void
> @@ -1022,7 +1024,7 @@ patch_match(LINENUM base, LINENUM offset
> LINENUM pat_lines = pch_ptrn_lines() - fuzz;
> const char *ilineptr;
> const char *plineptr;
> - u_int plinelen;
> + unsigned short plinelen;
>
> for (iline = base + offset + fuzz; pline <= pat_lines; pline++, iline++) {
> ilineptr = ifetch(iline, offset >= 0);
>
> Modified: head/usr.bin/patch/pch.c
> ==============================================================================
> --- head/usr.bin/patch/pch.c Mon Jan 2 18:20:22 2017 (r311108)
> +++ head/usr.bin/patch/pch.c Mon Jan 2 18:23:31 2017 (r311109)
> @@ -56,7 +56,7 @@ static LINENUM p_max; /* max allowed va
> static LINENUM p_context = 3; /* # of context lines */
> static LINENUM p_input_line = 0; /* current line # from patch file */
> static char **p_line = NULL;/* the text of the hunk */
> -static u_int *p_len = NULL; /* length of each line */
> +static unsigned short *p_len = NULL; /* length of each line */
> static char *p_char = NULL; /* +, -, and ! */
> static int hunkmax = INITHUNKMAX; /* size of above arrays to begin with */
> static int p_indent; /* indent to patch */
> @@ -136,7 +136,7 @@ set_hunkmax(void)
> if (p_line == NULL)
> p_line = malloc(hunkmax * sizeof(char *));
> if (p_len == NULL)
> - p_len = malloc(hunkmax * sizeof(u_int));
> + p_len = malloc(hunkmax * sizeof(unsigned short));
> if (p_char == NULL)
> p_char = malloc(hunkmax * sizeof(char));
> }
> @@ -153,7 +153,7 @@ grow_hunkmax(void)
> fatal("Internal memory allocation error\n");
>
> p_line = reallocf(p_line, new_hunkmax * sizeof(char *));
> - p_len = reallocf(p_len, new_hunkmax * sizeof(u_int));
> + p_len = reallocf(p_len, new_hunkmax * sizeof(unsigned short));
> p_char = reallocf(p_char, new_hunkmax * sizeof(char));
>
> if (p_line != NULL && p_len != NULL && p_char != NULL) {
> @@ -1210,7 +1210,7 @@ bool
> pch_swap(void)
> {
> char **tp_line; /* the text of the hunk */
> - u_int *tp_len; /* length of each line */
> + unsigned short *tp_len;/* length of each line */
> char *tp_char; /* +, -, and ! */
> LINENUM i;
> LINENUM n;
> @@ -1367,7 +1367,7 @@ pch_context(void)
> /*
> * Return the length of a particular patch line.
> */
> -u_int
> +unsigned short
> pch_line_len(LINENUM line)
> {
> return p_len[line];
>
> Modified: head/usr.bin/patch/pch.h
> ==============================================================================
> --- head/usr.bin/patch/pch.h Mon Jan 2 18:20:22 2017 (r311108)
> +++ head/usr.bin/patch/pch.h Mon Jan 2 18:23:31 2017 (r311109)
> @@ -44,7 +44,7 @@ bool there_is_another_patch(void);
> bool another_hunk(void);
> bool pch_swap(void);
> char *pfetch(LINENUM);
> -u_int pch_line_len(LINENUM);
> +unsigned short pch_line_len(LINENUM);
> LINENUM pch_first(void);
> LINENUM pch_ptrn_lines(void);
> LINENUM pch_newfirst(void);
>
More information about the svn-src-all
mailing list