summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/perl/files/fix-setgroup.patch
blob: 2b490e6067663493f98923f1e762679f97f0492c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Test script to reproduce the problem:

#!/usr/bin/env perl
$) = "2 2";
print $!;

Result from perl 5.28 under strace:

setgroups(1, [2])                       = 0
setresgid(-1, 2, -1)                    = 0

Result from perl 5.30 under strace:

setgroups(1, [-1])                      = -1 EINVAL (Invalid argument)
setresgid(-1, 2, -1)                    = 0

Patch which broke this upstream:
https://perl5.git.perl.org/perl.git/commitdiff/5d4a52b5c68a11bfc97c2e24806993b84a61eade

Issue is that the new function changes the endptr to the end of the
scanned number and needs to be reset to the end of the string for 
each iteration of the loop.

[YOCTO #13391]

RP
2019/6/14
Upstream-Status: Pending

Index: perl-5.30.0/mg.c
===================================================================
--- perl-5.30.0.orig/mg.c
+++ perl-5.30.0/mg.c
@@ -3179,6 +3256,7 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
 	    const char *p = SvPV_const(sv, len);
             Groups_t *gary = NULL;
             const char* endptr = p + len;
+            const char* realend = p + len;
             UV uv;
 #ifdef _SC_NGROUPS_MAX
            int maxgrp = sysconf(_SC_NGROUPS_MAX);
@@ -3209,6 +3287,7 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
                     Newx(gary, i + 1, Groups_t);
                 else
                     Renew(gary, i + 1, Groups_t);
+                endptr = realend;
                 if (grok_atoUV(p, &uv, &endptr))
                     gary[i] = (Groups_t)uv;
                 else {