aboutsummaryrefslogtreecommitdiffstats
path: root/src/permchain.c
diff options
context:
space:
mode:
authorMartin Pärtel <martin.partel@gmail.com>2023-11-19 21:49:53 +0200
committerMartin Pärtel <martin.partel@gmail.com>2023-11-19 21:49:53 +0200
commit5c8390f75925797a81973925a14cdf8ab092a3bc (patch)
treef998c665b983a173cffc6ada9113494ffac96268 /src/permchain.c
parentbea88937f4564e282063fb44aeac485012cfae87 (diff)
parentdb61be1897ffe8f4d1a72bed62c8c892d06a1983 (diff)
downloadbindfs-5c8390f75925797a81973925a14cdf8ab092a3bc.tar.gz
Merge remote-tracking branch 'origin/master' into vagrant-ci
Diffstat (limited to 'src/permchain.c')
-rw-r--r--src/permchain.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/permchain.c b/src/permchain.c
index b95bd8b..d101aa1 100644
--- a/src/permchain.c
+++ b/src/permchain.c
@@ -67,6 +67,8 @@ static int add_chmod_rule_to_permchain(const char *start, const char *end,
int len = end - start;
char *buf = malloc((len + 1) * sizeof(char));
+ if (buf == NULL)
+ return -1;
const char *p = buf;
enum {LHS, RHS} state = LHS;
@@ -149,8 +151,18 @@ error:
static int add_octal_rule_to_permchain(const char *start, const char *end,
struct permchain *pc)
{
+ // Make [start..end[ available as a null-terminated string to `strtol`
+ const int len = end - start;
+ char * const buf = malloc((len + 1) * sizeof(char));
+ if (buf == NULL)
+ return -1;
+ memcpy(buf, start, len);
+ buf[len] = '\0';
+
struct permchain *newpc = permchain_create();
- long mode = strtol(start, NULL, 8);
+
+ long mode = strtol(buf, NULL, 8);
+ free(buf);
if (mode < 0 || mode > 0777) {
permchain_destroy(newpc);