summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debian/changelog8
-rw-r--r--src/main.c26
2 files changed, 20 insertions, 14 deletions
diff --git a/debian/changelog b/debian/changelog
index 3751557..e158dc6 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+flex (2.6.1-1.3) unstable; urgency=medium
+
+ * Non-maintainer upload.
+ * Fix FTBFS on hurd (upstream 7975c43384d766ca12cb3f292754dbdc34168886).
+ (Closes: 838133).
+
+ -- Christoph Berg <myon@debian.org> Wed, 04 Jan 2017 19:53:51 +0100
+
flex (2.6.1-1.2) unstable; urgency=medium
* Non-maintainer upload.
diff --git a/src/main.c b/src/main.c
index e329e4e..177187f 100644
--- a/src/main.c
+++ b/src/main.c
@@ -358,8 +358,8 @@ void check_options (void)
if (!path) {
m4 = M4;
} else {
+ int m4_length = strlen(m4);
do {
- char m4_path[PATH_MAX];
int length = strlen(path);
struct stat sbuf;
@@ -367,19 +367,17 @@ void check_options (void)
if (!endOfDir)
endOfDir = path+length;
- if ((endOfDir-path+2) >= sizeof(m4_path)) {
- path = endOfDir+1;
- continue;
- }
-
- strncpy(m4_path, path, sizeof(m4_path));
- m4_path[endOfDir-path] = '/';
- m4_path[endOfDir-path+1] = '\0';
- strncat(m4_path, m4, sizeof(m4_path));
- if (stat(m4_path, &sbuf) == 0 &&
- (S_ISREG(sbuf.st_mode)) && sbuf.st_mode & S_IXUSR) {
- m4 = strdup(m4_path);
- break;
+ {
+ char m4_path[endOfDir-path + 1 + m4_length + 1];
+
+ memcpy(m4_path, path, endOfDir-path);
+ m4_path[endOfDir-path] = '/';
+ memcpy(m4_path + (endOfDir-path) + 1, m4, m4_length + 1);
+ if (stat(m4_path, &sbuf) == 0 &&
+ (S_ISREG(sbuf.st_mode)) && sbuf.st_mode & S_IXUSR) {
+ m4 = strdup(m4_path);
+ break;
+ }
}
path = endOfDir+1;
} while (path[0]);