commit 35095610b1bb11a6c722f6d42f6609bd308531a8 from: Omar Polo date: Tue Jun 14 10:35:07 2022 UTC got patch: use ints for line offsets instead of longs ints have the advantage that their size is more likely to be the same across the various architecture supported by OpenBSD, thus introducing less possible differences. INT_MAX is still (at least) a few order of magnitudes higher than the patches we dealt with (even abnormal ones.) suggested by stsp@ commit - 5b7126c502f8d046d0779dd2cb0558163c383819 commit + 35095610b1bb11a6c722f6d42f6609bd308531a8 blob - c6c29a099c6a9b6dc6883641ef3ef96ce7f47156 blob + cc6e50c604345707509575df4645384d00d97a63 --- lib/got_lib_privsep.h +++ lib/got_lib_privsep.h @@ -618,10 +618,10 @@ struct got_imsg_patch { * Structure for GOT_IMSG_PATCH_HUNK data. */ struct got_imsg_patch_hunk { - long oldfrom; - long oldlines; - long newfrom; - long newlines; + int oldfrom; + int oldlines; + int newfrom; + int newlines; }; struct got_remote_repo; blob - 7e310aecff9b929aea8d42b20f432b08c127268f blob + 133f045e882ab3867bf5bbdb210357ff17f4b06a --- lib/patch.c +++ lib/patch.c @@ -54,13 +54,13 @@ struct got_patch_hunk { STAILQ_ENTRY(got_patch_hunk) entries; const struct got_error *err; - long offset; + int offset; int old_nonl; int new_nonl; - long old_from; - long old_lines; - long new_from; - long new_lines; + int old_from; + int old_lines; + int new_from; + int new_lines; size_t len; size_t cap; char **lines; @@ -337,7 +337,7 @@ copy(FILE *tmp, FILE *orig, off_t copypos, off_t pos) } static const struct got_error * -locate_hunk(FILE *orig, struct got_patch_hunk *h, off_t *pos, long *lineno) +locate_hunk(FILE *orig, struct got_patch_hunk *h, off_t *pos, int *lineno) { const struct got_error *err = NULL; char *line = NULL; @@ -345,7 +345,7 @@ locate_hunk(FILE *orig, struct got_patch_hunk *h, off_ size_t linesize = 0; ssize_t linelen; off_t match = -1; - long match_lineno = -1; + int match_lineno = -1; for (;;) { linelen = getline(&line, &linesize, orig); @@ -426,7 +426,7 @@ done: } static const struct got_error * -apply_hunk(FILE *tmp, struct got_patch_hunk *h, long *lineno) +apply_hunk(FILE *tmp, struct got_patch_hunk *h, int *lineno) { size_t i, new = 0; @@ -461,7 +461,7 @@ patch_file(struct got_patch *p, const char *path, FILE const struct got_error *err = NULL; struct got_patch_hunk *h; struct stat sb; - long lineno = 0; + int lineno = 0; FILE *orig; off_t copypos, pos; char *line = NULL; @@ -698,7 +698,7 @@ reverse_patch(struct got_patch *p) { struct got_patch_hunk *h; size_t i; - long tmp; + int tmp; STAILQ_FOREACH(h, &p->head, entries) { tmp = h->old_from; blob - 0e9106ae59e928cb2940be6f14a61271e7d97522 blob + 23212abe02328d5837822225fecbf174e677f2bb --- libexec/got-read-patch/got-read-patch.c +++ libexec/got-read-patch/got-read-patch.c @@ -198,7 +198,7 @@ find_patch(int *done, FILE *fp) } static const struct got_error * -strtolnum(char **str, long *n) +strtolnum(char **str, int *n) { char *p, c; const char *errstr; @@ -209,7 +209,7 @@ strtolnum(char **str, long *n) c = *p; *p = '\0'; - *n = strtonum(*str, 0, LONG_MAX, &errstr); + *n = strtonum(*str, 0, INT_MAX, &errstr); if (errstr != NULL) return got_error(GOT_ERR_PATCH_MALFORMED); @@ -264,10 +264,10 @@ parse_hdr(char *s, int *done, struct got_imsg_patch_hu if (*s != '@') return got_error(GOT_ERR_PATCH_MALFORMED); - if (hdr->oldfrom >= LONG_MAX - hdr->oldlines || - hdr->newfrom >= LONG_MAX - hdr->newlines || + if (hdr->oldfrom >= INT_MAX - hdr->oldlines || + hdr->newfrom >= INT_MAX - hdr->newlines || /* not so sure about this one */ - hdr->oldlines >= LONG_MAX - hdr->newlines - 1 || + hdr->oldlines >= INT_MAX - hdr->newlines - 1 || (hdr->oldlines == 0 && hdr->newlines == 0)) return got_error(GOT_ERR_PATCH_MALFORMED); @@ -340,7 +340,7 @@ parse_hunk(FILE *fp, int *done) char *line = NULL, ch; size_t linesize = 0; ssize_t linelen; - long leftold, leftnew; + int leftold, leftnew; linelen = getline(&line, &linesize, fp); if (linelen == -1) {