mirror of
				https://gitlab.alpinelinux.org/alpine/aports.git
				synced 2025-10-31 00:12:05 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			54 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| Patch by Robin Mueller
 | |
| 
 | |
| libmusl doesn't support the z character in the format pattern for strptime this 
 | |
| is a special functionality of glibc.
 | |
| 
 | |
| patch is slightly adapted version of glibc code:
 | |
| https://elixir.bootlin.com/glibc/latest/source/time/strptime_l.c#L776
 | |
| 
 | |
| --- a/src/rgw/rgw_common.cc	2021-07-08 16:03:56.000000000 +0200
 | |
| +++ b/src/rgw/rgw_common.cc	2021-08-18 13:08:22.938903459 +0200
 | |
| @@ -531,7 +531,41 @@
 | |
|  {
 | |
|    // FIPS zeroization audit 20191115: this memset is not security related.
 | |
|    memset(t, 0, sizeof(*t));
 | |
| -  return check_str_end(strptime(s, "%a, %d %b %Y %H:%M:%S %z", t));
 | |
| +  s = strptime(s, "%a, %d %b %Y %H:%M:%S", t);
 | |
| +  if (s) {
 | |
| +    s++;
 | |
| +    int val;
 | |
| +    val = 0;
 | |
| +    while (isspace(*s))
 | |
| +      ++s;
 | |
| +    if (*s == 'Z') {
 | |
| +        ++s;
 | |
| +        t->tm_gmtoff = 0;
 | |
| +    } else {
 | |
| +      if (*s != '+' && *s != '-')
 | |
| +        return false;
 | |
| +      bool neg = *s++ == '-';
 | |
| +      int n = 0;
 | |
| +      while (n < 4 && *s >= '0' && *s <= '9') {
 | |
| +        val = val * 10 + *s++ - '0';
 | |
| +        ++n;
 | |
| +        if (*s == ':' && n == 2 && isdigit (*(s + 1)))
 | |
| +          ++s;
 | |
| +      }
 | |
| +      if (n == 2)
 | |
| +        val *= 100;
 | |
| +      else if (n != 4)
 | |
| +        /* Only two or four digits recognized.  */
 | |
| +        return false;
 | |
| +      else if (val % 100 >= 60)
 | |
| +        /* Minutes valid range is 0 through 59.  */
 | |
| +        return false;
 | |
| +      t->tm_gmtoff = (val / 100) * 3600 + (val % 100) * 60;
 | |
| +      if (neg)
 | |
| +        t->tm_gmtoff = -t->tm_gmtoff;
 | |
| +    }
 | |
| +  }
 | |
| +  return check_str_end(s);
 | |
|  }
 | |
|  
 | |
|  bool parse_rfc2616(const char *s, struct tm *t)
 |