Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vvtUU-008d76-2B for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Feb 2026 08:46:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vvtUT-001zX6-1y for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Feb 2026 08:46:29 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vvtUT-001zWs-0u for pgsql-hackers@lists.postgresql.org; Fri, 27 Feb 2026 08:46:29 +0000 Received: from mail-yx1-xb141.google.com ([2607:f8b0:4864:20::b141]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vvtUQ-00000001XRk-0I4v for pgsql-hackers@lists.postgresql.org; Fri, 27 Feb 2026 08:46:29 +0000 Received: by mail-yx1-xb141.google.com with SMTP id 956f58d0204a3-64ae222d978so1561030d50.1 for ; Fri, 27 Feb 2026 00:46:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772181985; cv=none; d=google.com; s=arc-20240605; b=BgUTKuvtO+kkiNufJhqqUVtpvtAAdA2G/84/WjQFEL8gGK2JJf/YXaKp9vNlSalQe9 3Vo+9LkjbzPJv/JCQRDY7wCnja7EWElukO+XwV9ZdjWAWrj79zYmu3PKpDt4e6bFvWCR TIQ9BsJ6SqWt+lNRuInHO1W+R4NhVpnrrMIF+QqlmrJ6NuRTmmyCP7jdekcMMyv8hV/J 6mwbCOlnMKdA+ukbq9Is4dDbHP6XHbjYroO37RBrZLOxoQybr4nGN6oGQQP5Rj2hH2U/ j0oLxkbhmuVNAFwr6h8lE5Z3uepvcFRczhZBcJnDKOaDm14JTM3FEcc5W+39enxVJe/7 sDuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=wiX4FUYRPu/j1PThigCiaAaQqiGrhfK1h1Ijm4FITP4=; fh=Nxl87IDa5gF1dRA58aoV+1Eeu1wGpaDWWeyyN1wP2Qw=; b=OlboQmrglX9qlbTUJe5fMBT6doBRIG9iiLUm1c84jqHlGA8DJI29p48y2efxQti+1k 4fuFSOKNQLCoXIxcfk/5mgnKlhy7uDxpqe/KcraSb2AEmTi6gnJt9vFuMz0c89mWYIXJ Tfxs+gH+hpGhsa8AG42rUURzCehnx35k6FoXUMgv+jM81PuuuYNTbfkbBtI5yPHbA1rk qgK5l96e9F2hEkgtbxCAW5Ee4ViglXOfHrbz+AG+FSMT5g2O8jD9O6ePBD8j3bwGdL/E mJOBCuIufor59ZFt41IY4jZ2JYCe2wQuP+bfZ0ktQxkIIGCDFzVylLadH4vic461K3Mg i4+g==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772181985; x=1772786785; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=wiX4FUYRPu/j1PThigCiaAaQqiGrhfK1h1Ijm4FITP4=; b=kBHLXF7nR+UGKyq8RAGf8EKAlN2TTfne5VcAyd9MIJZ80ni6oNxK3aRipnPedhatSy qMs4NR3FHhEyJhaO5MAx9D8GJ1iGeZfs7c3Ja1dSh3l0jZl6UReRHeUFU6+xFAr6Fnkc wPqUNWG1zPwWYyERR4QyKcLi3HsjDkqnIsnQBcdSpor6ejyOWQsxw8/pkbj+QFxwAEiO huW7dhzSWUKL67yWCKtnFMO1Gkk0XhOqL+DrLm010xlCj9b0Q6yuMn9k6blvG6Tx7jQr XyD+IJQ/k9LkEMjw/l3ITGLHxQknD3QAD7iOsAymYAu/wfHIkaAn5jJPM7XTsBgwifps Jg8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772181985; x=1772786785; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=wiX4FUYRPu/j1PThigCiaAaQqiGrhfK1h1Ijm4FITP4=; b=b30ebVVLmpvwkH570hcSoc625rGMRR7RQ3FqI53/A+ZU1/G7bJs9ssPwxVVl26yl8Q 2aLdZKTHVq1FrqBQftFTrNallIpwdc7z1qRAeLGywg5Kxr6eOjgVwSxUSfv/WyQb5eRp txUQvzxRoE9WKcdJEThoC4gbEG4hS0CrV0nWUcclZSZlEV4ZxBQZkxH4GQKsQIikUgZv khY0N6G5AM4/CfZ96smZkDCebI+hfMKJGfSLU4UQrdCAl1KwfJc6Nl0DVdP/X77aLn1/ pxGKClupVLQfIYEgpD3UmlIIqS+xV7CNKU6PPsXYKzkzsNHyZZ7ISaV2ISWx9mKIbnwO E6Vg== X-Forwarded-Encrypted: i=1; AJvYcCVpxRHOLF4pqt3qbfoq6RxBgg2mkPtrEewMCVj8SearIDonR30ErB9nh7KEqOCyi2H8phAfwVOcPWGE9Z4u@lists.postgresql.org X-Gm-Message-State: AOJu0Yy3rcdLpvckKatCYckRco+qmM53xmIO7qEA5OeglKg+JVB/qZYw kMVuP09o5u7Fw+txl7idDCZknkMsNcIuxvrVbhqijThMQ0D3QoYJYzBDrg3S0Dt1cdwR+Nk3v/6 bkKKKbIFB8rMPcdnR5MfoVLQQ1eqK9T0= X-Gm-Gg: ATEYQzx62ppQ0u5JgMwEQnNYtBkSfO/smy4torOKfD4QUSSNm1Teb4xrvQVP2eZzqTN g1N8mqO+8nuO902MSACDlZ5BeWQs0Q49V0buu8LVU4dUjEIQuYZvLhXEfyBoaDe7TxPGSilCB9r 7I6Dt4lAf2ecxJz2wlHtJq8GhBP6UFHjIwmtEPY3qgvvqbi4utRnlbjal7Jtcy30+NQ2H6QPzEi ua12a2xvrJbWzgmKa50oxghKf0IDsF/1DGigaelSF6PWNxx+6v2h7mW4wNv5hWASCtHrZOKakBE Lt+qtq8= X-Received: by 2002:a05:690e:4105:b0:645:51f9:b4c0 with SMTP id 956f58d0204a3-64cc220ffc6mr1980924d50.55.1772181985199; Fri, 27 Feb 2026 00:46:25 -0800 (PST) MIME-Version: 1.0 References: <202602261236.ttanikrvfx6w@alvherre.pgsql> <63229AD5-48DB-417C-9361-EA478DAF57AF@gmail.com> In-Reply-To: <63229AD5-48DB-417C-9361-EA478DAF57AF@gmail.com> From: zhanghu Date: Fri, 27 Feb 2026 16:46:12 +0800 X-Gm-Features: AaiRm50HCIr1LHCXGWLfjWwVtltlJ6Z7r9M7Fsr-81c97S6zp5N7nrvIJmIFTeU Message-ID: Subject: Re: guc: make dereference style consistent in check_backtrace_functions To: Chao Li Cc: =?UTF-8?Q?=C3=81lvaro_Herrera?= , Junwang Zhao , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000b5ad34064bca45fb" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000b5ad34064bca45fb Content-Type: multipart/alternative; boundary="000000000000b5ad34064bca45f9" --000000000000b5ad34064bca45f9 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Chao Li =E4=BA=8E2026=E5=B9=B42=E6=9C=8827=E6=97= =A5=E5=91=A8=E4=BA=94 09:34=E5=86=99=E9=81=93=EF=BC=9A > > > > On Feb 26, 2026, at 20:37, =C3=81lvaro Herrera w= rote: > > > > There is at least one more place in the code where this is done. > > > > I did a search with the command: grep -RInE > '\*[[:space:]]*[A-Za-z_][A-Za-z0-9_]*\[0\]' src contrib --include=3D'*.c' > > Excluding irrelevant results, there are 3 more occurrences: > > 1 - contrib/basic_archive/basic_archive.c line 105 > ``` > if (*newval =3D=3D NULL || *newval[0] =3D=3D '\0') > return true; > ``` > > Here, the code checks *newval first, which implies that the subsequent > *newval[0] is unintentional syntax. > > 2 - src/interfaces/ecpg/pgtypeslib/interval.c line 62 > ``` > int > DecodeInterval(char **field, int *ftype, int nf, /* int range, */ > int *dtype, struct /* pg_ */ tm *tm, fsec_t > *fsec) > { > ... > if (IntervalStyle =3D=3D INTSTYLE_SQL_STANDARD && *field[0] =3D= =3D '-') > { > /* Check for additional explicit signs */ > bool more_signs =3D false; > > for (i =3D 1; i < nf; i++) > { > if (*field[i] =3D=3D '-' || *field[i] =3D=3D '+') > { > more_signs =3D true; > break; > } > } > ``` > > 3 - src/backend/utils/adt/datatime.c line 3522 > ``` > int > DecodeInterval(char **field, int *ftype, int nf, int range, > int *dtype, struct pg_itm_in *itm_in) > { > ... > if (IntervalStyle =3D=3D INTSTYLE_SQL_STANDARD && nf > 0 && *fiel= d[0] > =3D=3D '-') > { > force_negative =3D true; > /* Check for additional explicit signs */ > for (i =3D 1; i < nf; i++) > { > if (*field[i] =3D=3D '-' || *field[i] =3D=3D '+') > { > force_negative =3D false; > break; > } > } > } > ``` > > Where 2&3 makes this patch more interesting. > > Both occurrences are inside functions named DecodeInterval. For non-zero > i, the code also performs *field[i]: > > Given this code has been there for years, I don=E2=80=99t believe it is a= bug. I > checked the callers of DecodeInterval in both files and found that field = is > defined as: > ``` > char *field[MAXDATEFIELDS]; > ``` > > This explains why *field[i] works; it is doing the intended thing by > getting the first character of the string at array position i. > > However, since the precedence between the [] and * operators frequently > confuses people, I suggest adding parentheses to make the intention > explicit as *(field[i]). Furthermore, I think we should change the functi= on > signatures to use the type char *field[] to reflect the actual type the > functions expect. If a caller were to pass a true char ** typed field to > DecodeInterval, the current logic would result in a bug. > > See the attached diff for my suggested changes. > > Best regards, > -- > Chao Li (Evan) > HighGo Software Co., Ltd. > https://www.highgo.com/ > > Hi, > > Thank you all for the reviews and detailed feedback. > > =C3=81lvaro, thanks for pointing out that there were additional > occurrences elsewhere in the tree. I have updated the original > patch to address those cases; the revised version is attached > as v2-0001. > > I also appreciate the review and suggestions from > Chao and Junwang. > > Regarding the additional changes suggested by Chao: they go > somewhat beyond the original scope of my original patch. > To keep the discussion concrete, I have included Chao=E2=80=99s proposed > diff as a separate patch (v2-0002) so it can be reviewed independently. > > I have reviewed v2-0002 locally, and it looks good to me. > > Thanks again for the guidance. > > Regards, > Zhang Hu > > > --000000000000b5ad34064bca45f9 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


Chao Li <li.evan.chao@gmail.com> =E4=BA=8E2026=E5= =B9=B42=E6=9C=8827=E6=97=A5=E5=91=A8=E4=BA=94 09:34=E5=86=99=E9=81=93=EF=BC= =9A


> On Feb 26, 2026, at 20:37, =C3=81lvaro Herrera <alvherre@kurilemu.de> wrote:<= br> >
> There is at least one more place in the code where this is done.
>

I did a search with the command: grep -RInE '\*[[:space:]]*[A-Za-z_][A-= Za-z0-9_]*\[0\]' src contrib --include=3D'*.c'

Excluding irrelevant results, there are 3 more occurrences:

1 - contrib/basic_archive/basic_archive.c line 105
```
=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (*newval =3D=3D NULL || *newval[0] =3D=3D &#= 39;\0')
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return true;
```

Here, the code checks *newval first, which implies that the subsequent *new= val[0] is unintentional syntax.

2 - src/interfaces/ecpg/pgtypeslib/interval.c line 62
```
int
DecodeInterval(char **field, int *ftype, int nf,=C2=A0 =C2=A0 =C2=A0 =C2=A0= /* int range, */
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0int *dtype, struct /* pg_ */ tm *tm, fsec_t *fsec)<= br> {
=C2=A0 ...
=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (IntervalStyle =3D=3D INTSTYLE_SQL_STANDARD = && *field[0] =3D=3D '-')
=C2=A0 =C2=A0 =C2=A0 =C2=A0 {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 /* Check for additi= onal explicit signs */
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 bool=C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 more_signs =3D false;

=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 for (i =3D 1; i <= ; nf; i++)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 if (*field[i] =3D=3D '-' || *field[i] =3D=3D '+'= )
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 more_signs =3D true;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 break;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 }
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 }
```

3 - src/backend/utils/adt/datatime.c line 3522
```
int
DecodeInterval(char **field, int *ftype, int nf, int range,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0int *dtype, struct pg_itm_in *itm_in)
{
=C2=A0...
=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (IntervalStyle =3D=3D INTSTYLE_SQL_STANDARD = && nf > 0 && *field[0] =3D=3D '-')
=C2=A0 =C2=A0 =C2=A0 =C2=A0 {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 force_negative =3D = true;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 /* Check for additi= onal explicit signs */
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 for (i =3D 1; i <= ; nf; i++)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 if (*field[i] =3D=3D '-' || *field[i] =3D=3D '+'= )
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 force_negative =3D false;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 break;
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 }
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 }
=C2=A0 =C2=A0 =C2=A0 =C2=A0 }
```

Where 2&3 makes this patch more interesting.

Both occurrences are inside functions named DecodeInterval. For non-zero i,= the code also performs *field[i]:

Given this code has been there for years, I don=E2=80=99t believe it is a b= ug. I checked the callers of DecodeInterval in both files and found that fi= eld is defined as:
```
=C2=A0 =C2=A0 char *field[MAXDATEFIELDS];
```

This explains why *field[i] works; it is doing the intended thing by gettin= g the first character of the string at array position i.

However, since the precedence between the [] and * operators frequently con= fuses people, I suggest adding parentheses to make the intention explicit a= s *(field[i]). Furthermore, I think we should change the function signature= s to use the type char *field[] to reflect the actual type the functions ex= pect. If a caller were to pass a true char ** typed field to DecodeInterval= , the current logic would result in a bug.

See the attached diff for my suggested changes.

Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
ht= tps://www.highgo.com/

Hi,

Thank you all for the reviews and detailed feedback.

=C3= =81lvaro, thanks for pointing out that there were additional
occurrences= elsewhere in the tree. I have updated the original
patch to address tho= se cases; the revised version is attached
as v2-0001.

I also appr= eciate the=C2=A0 review and suggestions from
Chao and Junwang.

Re= garding the additional changes suggested by Chao: they go
somewhat beyon= d the original scope of my original patch.
To keep the discussion concre= te, I have included Chao=E2=80=99s proposed
diff as a separate patch (v2= -0002) so it can be reviewed independently.

I have reviewed v2-0002 = locally, and it looks good to me.

Thanks again for the guidance.
=
Regards,
Zhang Hu


--000000000000b5ad34064bca45f9-- --000000000000b5ad34064bca45fb Content-Type: application/octet-stream; name="v2-0001-guc-Clarify-dereference-order-in-newval-string-ch.patch" Content-Disposition: attachment; filename="v2-0001-guc-Clarify-dereference-order-in-newval-string-ch.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm4n7qmh0 RnJvbSBlMzVmMGU0YmFhMGNiY2NhOWE5NjlmYzM3MWVjNTYwMTE1MjA1MGJjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB6aGFuZ2h1IDxrb25nYmFpazIyOEBnbWFpbC5jb20+CkRhdGU6 IEZyaSwgMjcgRmViIDIwMjYgMTQ6Mzk6MzcgKzA4MDAKU3ViamVjdDogW1BBVENIIHYyIDEvMl0g Z3VjOiBDbGFyaWZ5IGRlcmVmZXJlbmNlIG9yZGVyIGluIG5ld3ZhbCBzdHJpbmcgY2hlY2tzCgpJ biBjaGVja19iYWNrdHJhY2VfZnVuY3Rpb25zKCksIG1vc3QgYWNjZXNzZXMgdG8gdGhlIGlucHV0 IHN0cmluZyB1c2UKdGhlIGZvcm06CgogICAgKCpuZXd2YWwpW2ldCgpIb3dldmVyLCB0aGUgZW1w dHktc3RyaW5nIGNoZWNrIHdhcyB3cml0dGVuIGFzOgoKICAgICpuZXd2YWxbMF0gPT0gJ1wwJwoK U2luY2UgW10gaGFzIGhpZ2hlciBwcmVjZWRlbmNlIHRoYW4gKiwgdGhpcyBpcyBwYXJzZWQgYXMK KihuZXd2YWxbMF0pLiBBbHRob3VnaCBpdCBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQgd2hlbiB0 aGUgaW5kZXgKaXMgemVybywgaXQgaW1wbGllcyBhcnJheS1zdHlsZSBhY2Nlc3Mgb24gbmV3dmFs IGFuZCBpcyBpbmNvbnNpc3RlbnQKd2l0aCB0aGUgc3Vycm91bmRpbmcgc3R5bGUuCgpTaW1pbGFy bHksIGluIGNoZWNrX2FyY2hpdmVfZGlyZWN0b3J5KCksIHRoZSBlbXB0eS1zdHJpbmcgY2hlY2sK d2FzIHdyaXR0ZW4gYXM6CgogICAgKm5ld3ZhbFswXSA9PSAnXDAnCgpJbiBib3RoIGNhc2VzLCBu ZXd2YWwgaXMgYSBwb2ludGVyLXRvLXBvaW50ZXIgdXNlZCBhcyBhbiBvdXRwdXQKcGFyYW1ldGVy IGluIHRoZSBHVUMgZnJhbWV3b3JrIHJhdGhlciB0aGFuIGEgdHdvLWRpbWVuc2lvbmFsCmNoYXJh Y3RlciBhcnJheS4gUmV3cml0aW5nIHRoZXNlIGNoZWNrcyBhczoKCiAgICAoKm5ld3ZhbClbMF0g PT0gJ1wwJwoKbWFrZXMgdGhlIGludGVuZGVkIGRlcmVmZXJlbmNlIG9yZGVyIGV4cGxpY2l0LgoK Tm8gZnVuY3Rpb25hbCBjaGFuZ2UuCgpBdXRob3I6IHpoYW5naHUgPGtvbmdiYWlrMjI4QGdtYWls LmNvbT4KLS0tCiBjb250cmliL2Jhc2ljX2FyY2hpdmUvYmFzaWNfYXJjaGl2ZS5jIHwgMiArLQog c3JjL2JhY2tlbmQvdXRpbHMvZXJyb3IvZWxvZy5jICAgICAgICB8IDIgKy0KIDIgZmlsZXMgY2hh bmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRy aWIvYmFzaWNfYXJjaGl2ZS9iYXNpY19hcmNoaXZlLmMgYi9jb250cmliL2Jhc2ljX2FyY2hpdmUv YmFzaWNfYXJjaGl2ZS5jCmluZGV4IDZjN2Y5ODVkNDhiLi42ODYwZTQ2NDJlZSAxMDA2NDQKLS0t IGEvY29udHJpYi9iYXNpY19hcmNoaXZlL2Jhc2ljX2FyY2hpdmUuYworKysgYi9jb250cmliL2Jh c2ljX2FyY2hpdmUvYmFzaWNfYXJjaGl2ZS5jCkBAIC0xMDIsNyArMTAyLDcgQEAgY2hlY2tfYXJj aGl2ZV9kaXJlY3RvcnkoY2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291 cmNlKQogCSAqIE91ciBjaGVja19jb25maWd1cmVkIGNhbGxiYWNrIGFsc28gY2hlY2tzIGZvciB0 aGlzIGFuZCBwcmV2ZW50cwogCSAqIGFyY2hpdmluZyBmcm9tIHByb2NlZWRpbmcgaWYgaXQgaXMg c3RpbGwgZW1wdHkuCiAJICovCi0JaWYgKCpuZXd2YWwgPT0gTlVMTCB8fCAqbmV3dmFsWzBdID09 ICdcMCcpCisJaWYgKCpuZXd2YWwgPT0gTlVMTCB8fCAoKm5ld3ZhbClbMF0gPT0gJ1wwJykKIAkJ cmV0dXJuIHRydWU7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvZXJyb3Iv ZWxvZy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvZXJyb3IvZWxvZy5jCmluZGV4IDBkMGJmMGY2YWE1 Li42NTBhNzliN2UxMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvZXJyb3IvZWxvZy5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Vycm9yL2Vsb2cuYwpAQCAtMjYyNyw3ICsyNjI3LDcg QEAgY2hlY2tfYmFja3RyYWNlX2Z1bmN0aW9ucyhjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0cmEs IEd1Y1NvdXJjZSBzb3VyY2UpCiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlpZiAoKm5ld3ZhbFsw XSA9PSAnXDAnKQorCWlmICgoKm5ld3ZhbClbMF0gPT0gJ1wwJykKIAl7CiAJCSpleHRyYSA9IE5V TEw7CiAJCXJldHVybiB0cnVlOwotLSAKMi4zMy4wCgo= --000000000000b5ad34064bca45fb Content-Type: application/octet-stream; name="v2-0002-datetime-Clarify-DecodeInterval-field-parameter-t.patch" Content-Disposition: attachment; filename="v2-0002-datetime-Clarify-DecodeInterval-field-parameter-t.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm4n7vqd1 RnJvbSBmZjQ4YzhlZjc0ZTUzNzNhNDY2YTk4NjZjNTdmZDAwMjlhMTIzY2IxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiB6aGFuZ2h1IDxrb25nYmFpazIyOEBnbWFpbC5jb20+CkRhdGU6 IEZyaSwgMjcgRmViIDIwMjYgMTQ6NTE6NTcgKzA4MDAKU3ViamVjdDogW1BBVENIIHYyIDIvMl0g ZGF0ZXRpbWU6IENsYXJpZnkgRGVjb2RlSW50ZXJ2YWwgZmllbGQgcGFyYW1ldGVyIHR5cGUKIGFu ZCBkZXJlZmVyZW5jZQoKRGVjb2RlSW50ZXJ2YWwoKSBvcGVyYXRlcyBvbiBhbiBhcnJheSBvZiBz dHJpbmcgcG9pbnRlcnMsIGFzIGNhbGxlcnMKZGVmaW5lIGZpZWxkIGFzOgoKICAgIGNoYXIgKmZp ZWxkW01BWERBVEVGSUVMRFNdOwoKVGhlIGV4aXN0aW5nIHNpZ25hdHVyZSB1c2VkICJjaGFyICoq ZmllbGQiLCB3aGljaCBjb3VsZCBzdWdnZXN0IGEKZ2VuZXJpYyBwb2ludGVyLXRvLXBvaW50ZXIg YW5kIGFsbG93IGNhbGxlcnMgdG8gcGFzcyBhIHRydWUgY2hhciAqKiwKd2hpY2ggd291bGQgbm90 IG1hdGNoIHRoZSBmdW5jdGlvbuKAmXMgYXNzdW1wdGlvbnMuCgpDaGFuZ2UgdGhlIHBhcmFtZXRl ciB0eXBlIHRvICJjaGFyICpmaWVsZFtdIiB0byByZWZsZWN0IHRoZSBleHBlY3RlZAphcnJheS1v Zi1wb2ludGVycyB1c2FnZS4gIEFsc28gYWRkIHBhcmVudGhlc2VzIHRvIGV4cHJlc3Npb25zIHN1 Y2ggYXMKKmZpZWxkW2ldLCByZXdyaXRpbmcgdGhlbSBhcyAqKGZpZWxkW2ldKSB0byBtYWtlIHRo ZSBpbnRlbmRlZApkZXJlZmVyZW5jZSBvcmRlciBleHBsaWNpdC4KCk5vIGZ1bmN0aW9uYWwgY2hh bmdlLgoKQXV0aG9yOiBDaGFvIExpIDxsaS5ldmFuLmNoYW9AZ21haWwuY29tPgotLS0KIHNyYy9i YWNrZW5kL3V0aWxzL2FkdC9kYXRldGltZS5jICAgICAgICAgIHwgMTQgKysrKysrKy0tLS0tLS0K IHNyYy9pbmNsdWRlL3V0aWxzL2RhdGV0aW1lLmggICAgICAgICAgICAgIHwgIDIgKy0KIHNyYy9p bnRlcmZhY2VzL2VjcGcvcGd0eXBlc2xpYi9kdC5oICAgICAgIHwgIDIgKy0KIHNyYy9pbnRlcmZh Y2VzL2VjcGcvcGd0eXBlc2xpYi9pbnRlcnZhbC5jIHwgMTQgKysrKysrKy0tLS0tLS0KIDQgZmls ZXMgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2RhdGV0aW1lLmMgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvZGF0ZXRpbWUuYwppbmRleCA5MDk0NmRiNzJmZi4uN2Q4NDU3MDAxNjMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9kYXRldGltZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9kYXRldGltZS5jCkBAIC0zNDgzLDcgKzM0ODMsNyBAQCBDbGVhclBnSXRtSW4oc3RydWN0 IHBnX2l0bV9pbiAqaXRtX2luKQogICogc3VmZmljZXMuCiAgKi8KIGludAotRGVjb2RlSW50ZXJ2 YWwoY2hhciAqKmZpZWxkLCBpbnQgKmZ0eXBlLCBpbnQgbmYsIGludCByYW5nZSwKK0RlY29kZUlu dGVydmFsKGNoYXIgKmZpZWxkW10sIGludCAqZnR5cGUsIGludCBuZiwgaW50IHJhbmdlLAogCQkJ ICAgaW50ICpkdHlwZSwgc3RydWN0IHBnX2l0bV9pbiAqaXRtX2luKQogewogCWJvb2wJCWZvcmNl X25lZ2F0aXZlID0gZmFsc2U7CkBAIC0zNTE5LDEzICszNTE5LDEzIEBAIERlY29kZUludGVydmFs KGNoYXIgKipmaWVsZCwgaW50ICpmdHlwZSwgaW50IG5mLCBpbnQgcmFuZ2UsCiAJICogdG8gZHVt cCBpbiBwb3N0Z3JlcyBzdHlsZSwgbm90IFNRTCBzdHlsZS4pCiAJICotLS0tLS0tLS0tCiAJICov Ci0JaWYgKEludGVydmFsU3R5bGUgPT0gSU5UU1RZTEVfU1FMX1NUQU5EQVJEICYmIG5mID4gMCAm JiAqZmllbGRbMF0gPT0gJy0nKQorCWlmIChJbnRlcnZhbFN0eWxlID09IElOVFNUWUxFX1NRTF9T VEFOREFSRCAmJiBuZiA+IDAgJiYgKihmaWVsZFswXSkgPT0gJy0nKQogCXsKIAkJZm9yY2VfbmVn YXRpdmUgPSB0cnVlOwogCQkvKiBDaGVjayBmb3IgYWRkaXRpb25hbCBleHBsaWNpdCBzaWducyAq LwogCQlmb3IgKGkgPSAxOyBpIDwgbmY7IGkrKykKIAkJewotCQkJaWYgKCpmaWVsZFtpXSA9PSAn LScgfHwgKmZpZWxkW2ldID09ICcrJykKKwkJCWlmICgqKGZpZWxkW2ldKSA9PSAnLScgfHwgKihm aWVsZFtpXSkgPT0gJysnKQogCQkJewogCQkJCWZvcmNlX25lZ2F0aXZlID0gZmFsc2U7CiAJCQkJ YnJlYWs7CkBAIC0zNTU3LDcgKzM1NTcsNyBAQCBEZWNvZGVJbnRlcnZhbChjaGFyICoqZmllbGQs IGludCAqZnR5cGUsIGludCBuZiwgaW50IHJhbmdlLAogCQkJCSAqIGxlYXN0IG9uZSBkaWdpdDsg dGhlcmUgY291bGQgYmUgJzonLCAnLicsICctJyBlbWJlZGRlZCBpbgogCQkJCSAqIGl0IGFzIHdl bGwuCiAJCQkJICovCi0JCQkJQXNzZXJ0KCpmaWVsZFtpXSA9PSAnLScgfHwgKmZpZWxkW2ldID09 ICcrJyk7CisJCQkJQXNzZXJ0KCooZmllbGRbaV0pID09ICctJyB8fCAqKGZpZWxkW2ldKSA9PSAn KycpOwogCiAJCQkJLyoKIAkJCQkgKiBDaGVjayBmb3Igc2lnbmVkIGhoOm1tIG9yIGhoOm1tOnNz LiAgSWYgc28sIHByb2Nlc3MgZXhhY3RseQpAQCAtMzU2Nyw3ICszNTY3LDcgQEAgRGVjb2RlSW50 ZXJ2YWwoY2hhciAqKmZpZWxkLCBpbnQgKmZ0eXBlLCBpbnQgbmYsIGludCByYW5nZSwKIAkJCQkJ RGVjb2RlVGltZUZvckludGVydmFsKGZpZWxkW2ldICsgMSwgZm1hc2ssIHJhbmdlLAogCQkJCQkJ CQkJCSAgJnRtYXNrLCBpdG1faW4pID09IDApCiAJCQkJewotCQkJCQlpZiAoKmZpZWxkW2ldID09 ICctJykKKwkJCQkJaWYgKCooZmllbGRbaV0pID09ICctJykKIAkJCQkJewogCQkJCQkJLyogZmxp cCB0aGUgc2lnbiBvbiB0aW1lIGZpZWxkICovCiAJCQkJCQlpZiAoaXRtX2luLT50bV91c2VjID09 IFBHX0lOVDY0X01JTikKQEAgLTM2NTAsNyArMzY1MCw3IEBAIERlY29kZUludGVydmFsKGNoYXIg KipmaWVsZCwgaW50ICpmdHlwZSwgaW50IG5mLCBpbnQgcmFuZ2UsCiAJCQkJCWlmICgqY3AgIT0g J1wwJykKIAkJCQkJCXJldHVybiBEVEVSUl9CQURfRk9STUFUOwogCQkJCQl0eXBlID0gRFRLX01P TlRIOwotCQkJCQlpZiAoKmZpZWxkW2ldID09ICctJykKKwkJCQkJaWYgKCooZmllbGRbaV0pID09 ICctJykKIAkJCQkJCXZhbDIgPSAtdmFsMjsKIAkJCQkJaWYgKHBnX211bF9zNjRfb3ZlcmZsb3co dmFsLCBNT05USFNfUEVSX1lFQVIsICZ2YWwpKQogCQkJCQkJcmV0dXJuIERURVJSX0ZJRUxEX09W RVJGTE9XOwpAQCAtMzY2Myw3ICszNjYzLDcgQEAgRGVjb2RlSW50ZXJ2YWwoY2hhciAqKmZpZWxk LCBpbnQgKmZ0eXBlLCBpbnQgbmYsIGludCByYW5nZSwKIAkJCQkJZHRlcnIgPSBQYXJzZUZyYWN0 aW9uKGNwLCAmZnZhbCk7CiAJCQkJCWlmIChkdGVycikKIAkJCQkJCXJldHVybiBkdGVycjsKLQkJ CQkJaWYgKCpmaWVsZFtpXSA9PSAnLScpCisJCQkJCWlmICgqKGZpZWxkW2ldKSA9PSAnLScpCiAJ CQkJCQlmdmFsID0gLWZ2YWw7CiAJCQkJfQogCQkJCWVsc2UgaWYgKCpjcCA9PSAnXDAnKQpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvZGF0ZXRpbWUuaCBiL3NyYy9pbmNsdWRlL3V0aWxz L2RhdGV0aW1lLmgKaW5kZXggZjc3YzZhY2Q4YjYuLjY2ZGQ4NzFmZDdmIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS91dGlscy9kYXRldGltZS5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2RhdGV0 aW1lLmgKQEAgLTMxNiw3ICszMTYsNyBAQCBleHRlcm4gaW50CURlY29kZVRpbWV6b25lKGNvbnN0 IGNoYXIgKnN0ciwgaW50ICp0enApOwogZXh0ZXJuIGludAlEZWNvZGVUaW1lT25seShjaGFyICoq ZmllbGQsIGludCAqZnR5cGUsIGludCBuZiwKIAkJCQkJCSAgIGludCAqZHR5cGUsIHN0cnVjdCBw Z190bSAqdG0sIGZzZWNfdCAqZnNlYywgaW50ICp0enAsCiAJCQkJCQkgICBEYXRlVGltZUVycm9y RXh0cmEgKmV4dHJhKTsKLWV4dGVybiBpbnQJRGVjb2RlSW50ZXJ2YWwoY2hhciAqKmZpZWxkLCBp bnQgKmZ0eXBlLCBpbnQgbmYsIGludCByYW5nZSwKK2V4dGVybiBpbnQJRGVjb2RlSW50ZXJ2YWwo Y2hhciAqZmllbGRbXSwgaW50ICpmdHlwZSwgaW50IG5mLCBpbnQgcmFuZ2UsCiAJCQkJCQkgICBp bnQgKmR0eXBlLCBzdHJ1Y3QgcGdfaXRtX2luICppdG1faW4pOwogZXh0ZXJuIGludAlEZWNvZGVJ U084NjAxSW50ZXJ2YWwoY2hhciAqc3RyLAogCQkJCQkJCQkgIGludCAqZHR5cGUsIHN0cnVjdCBw Z19pdG1faW4gKml0bV9pbik7CmRpZmYgLS1naXQgYS9zcmMvaW50ZXJmYWNlcy9lY3BnL3BndHlw ZXNsaWIvZHQuaCBiL3NyYy9pbnRlcmZhY2VzL2VjcGcvcGd0eXBlc2xpYi9kdC5oCmluZGV4IDAw YTQ1Nzk5ZDU1Li40N2RmMGRmNDczOSAxMDA2NDQKLS0tIGEvc3JjL2ludGVyZmFjZXMvZWNwZy9w Z3R5cGVzbGliL2R0LmgKKysrIGIvc3JjL2ludGVyZmFjZXMvZWNwZy9wZ3R5cGVzbGliL2R0LmgK QEAgLTMxMSw3ICszMTEsNyBAQCBkbyB7IFwKICNkZWZpbmUgVElNRVNUQU1QX0lTX05PRU5EKGop CSgoaikgPT0gRFRfTk9FTkQpCiAjZGVmaW5lIFRJTUVTVEFNUF9OT1RfRklOSVRFKGopIChUSU1F U1RBTVBfSVNfTk9CRUdJTihqKSB8fCBUSU1FU1RBTVBfSVNfTk9FTkQoaikpCiAKLWludAkJCURl Y29kZUludGVydmFsKGNoYXIgKipmaWVsZCwgaW50ICpmdHlwZSwgaW50IG5mLCBpbnQgKmR0eXBl LCBzdHJ1Y3QgdG0gKnRtLCBmc2VjX3QgKmZzZWMpOworaW50CQkJRGVjb2RlSW50ZXJ2YWwoY2hh ciAqZmllbGRbXSwgaW50ICpmdHlwZSwgaW50IG5mLCBpbnQgKmR0eXBlLCBzdHJ1Y3QgdG0gKnRt LCBmc2VjX3QgKmZzZWMpOwogaW50CQkJRGVjb2RlVGltZShjaGFyICpzdHIsIGludCAqdG1hc2ss IHN0cnVjdCB0bSAqdG0sIGZzZWNfdCAqZnNlYyk7CiB2b2lkCQlFbmNvZGVEYXRlVGltZShzdHJ1 Y3QgdG0gKnRtLCBmc2VjX3QgZnNlYywgYm9vbCBwcmludF90eiwgaW50IHR6LCBjb25zdCBjaGFy ICp0em4sIGludCBzdHlsZSwgY2hhciAqc3RyLCBib29sIEV1cm9EYXRlcyk7CiB2b2lkCQlFbmNv ZGVJbnRlcnZhbChzdHJ1Y3QgdG0gKnRtLCBmc2VjX3QgZnNlYywgaW50IHN0eWxlLCBjaGFyICpz dHIpOwpkaWZmIC0tZ2l0IGEvc3JjL2ludGVyZmFjZXMvZWNwZy9wZ3R5cGVzbGliL2ludGVydmFs LmMgYi9zcmMvaW50ZXJmYWNlcy9lY3BnL3BndHlwZXNsaWIvaW50ZXJ2YWwuYwppbmRleCBlNDUy YTA4OGY5ZS4uNGQwZTc1ZDRkZDQgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2VjcGcvcGd0 eXBlc2xpYi9pbnRlcnZhbC5jCisrKyBiL3NyYy9pbnRlcmZhY2VzL2VjcGcvcGd0eXBlc2xpYi9p bnRlcnZhbC5jCkBAIC0zMjMsNyArMzIzLDcgQEAgRGVjb2RlSVNPODYwMUludGVydmFsKGNoYXIg KnN0ciwKICAqCQlpbnQgSW50ZXJ2YWxTdHlsZSA9IElOVFNUWUxFX1BPU1RHUkVTOwogICovCiBp bnQKLURlY29kZUludGVydmFsKGNoYXIgKipmaWVsZCwgaW50ICpmdHlwZSwgaW50IG5mLAkvKiBp bnQgcmFuZ2UsICovCitEZWNvZGVJbnRlcnZhbChjaGFyICpmaWVsZFtdLCBpbnQgKmZ0eXBlLCBp bnQgbmYsCS8qIGludCByYW5nZSwgKi8KIAkJCSAgIGludCAqZHR5cGUsIHN0cnVjdCAvKiBwZ18g Ki8gdG0gKnRtLCBmc2VjX3QgKmZzZWMpCiB7CiAJaW50CQkJSW50ZXJ2YWxTdHlsZSA9IElOVFNU WUxFX1BPU1RHUkVTX1ZFUkJPU0U7CkBAIC0zNjIsNyArMzYyLDcgQEAgRGVjb2RlSW50ZXJ2YWwo Y2hhciAqKmZpZWxkLCBpbnQgKmZ0eXBlLCBpbnQgbmYsCS8qIGludCByYW5nZSwgKi8KIAkJCQkg KiBsZWFzdCBvbmUgZGlnaXQ7IHRoZXJlIGNvdWxkIGJlICc6JywgJy4nLCAnLScgZW1iZWRkZWQg aW4KIAkJCQkgKiBpdCBhcyB3ZWxsLgogCQkJCSAqLwotCQkJCUFzc2VydCgqZmllbGRbaV0gPT0g Jy0nIHx8ICpmaWVsZFtpXSA9PSAnKycpOworCQkJCUFzc2VydCgqKGZpZWxkW2ldKSA9PSAnLScg fHwgKihmaWVsZFtpXSkgPT0gJysnKTsKIAogCQkJCS8qCiAJCQkJICogVHJ5IGZvciBoaDptbSBv ciBoaDptbTpzcy4gIElmIG5vdCwgZmFsbCB0aHJvdWdoIHRvCkBAIC0zNzMsNyArMzczLDcgQEAg RGVjb2RlSW50ZXJ2YWwoY2hhciAqKmZpZWxkLCBpbnQgKmZ0eXBlLCBpbnQgbmYsCS8qIGludCBy YW5nZSwgKi8KIAkJCQkJRGVjb2RlVGltZShmaWVsZFtpXSArIDEsCS8qIElOVEVSVkFMX0ZVTExf UkFOR0UsICovCiAJCQkJCQkJICAgJnRtYXNrLCB0bSwgZnNlYykgPT0gMCkKIAkJCQl7Ci0JCQkJ CWlmICgqZmllbGRbaV0gPT0gJy0nKQorCQkJCQlpZiAoKihmaWVsZFtpXSkgPT0gJy0nKQogCQkJ CQl7CiAJCQkJCQkvKiBmbGlwIHRoZSBzaWduIG9uIGFsbCBmaWVsZHMgKi8KIAkJCQkJCXRtLT50 bV9ob3VyID0gLXRtLT50bV9ob3VyOwpAQCAtNDQ3LDcgKzQ0Nyw3IEBAIERlY29kZUludGVydmFs KGNoYXIgKipmaWVsZCwgaW50ICpmdHlwZSwgaW50IG5mLAkvKiBpbnQgcmFuZ2UsICovCiAJCQkJ CWlmICgqY3AgIT0gJ1wwJykKIAkJCQkJCXJldHVybiBEVEVSUl9CQURfRk9STUFUOwogCQkJCQl0 eXBlID0gRFRLX01PTlRIOwotCQkJCQlpZiAoKmZpZWxkW2ldID09ICctJykKKwkJCQkJaWYgKCoo ZmllbGRbaV0pID09ICctJykKIAkJCQkJCXZhbDIgPSAtdmFsMjsKIAkJCQkJdmFsID0gdmFsICog TU9OVEhTX1BFUl9ZRUFSICsgdmFsMjsKIAkJCQkJZnZhbCA9IDA7CkBAIC00NTksNyArNDU5LDcg QEAgRGVjb2RlSW50ZXJ2YWwoY2hhciAqKmZpZWxkLCBpbnQgKmZ0eXBlLCBpbnQgbmYsCS8qIGlu dCByYW5nZSwgKi8KIAkJCQkJaWYgKCpjcCAhPSAnXDAnIHx8IGVycm5vICE9IDApCiAJCQkJCQly ZXR1cm4gRFRFUlJfQkFEX0ZPUk1BVDsKIAotCQkJCQlpZiAoKmZpZWxkW2ldID09ICctJykKKwkJ CQkJaWYgKCooZmllbGRbaV0pID09ICctJykKIAkJCQkJCWZ2YWwgPSAtZnZhbDsKIAkJCQl9CiAJ CQkJZWxzZSBpZiAoKmNwID09ICdcMCcpCkBAIC02MjIsMTQgKzYyMiwxNCBAQCBEZWNvZGVJbnRl cnZhbChjaGFyICoqZmllbGQsIGludCAqZnR5cGUsIGludCBuZiwJLyogaW50IHJhbmdlLCAqLwog CSAqIHRvIGR1bXAgaW4gcG9zdGdyZXMgc3R5bGUsIG5vdCBTUUwgc3R5bGUuKQogCSAqLS0tLS0t LS0tLQogCSAqLwotCWlmIChJbnRlcnZhbFN0eWxlID09IElOVFNUWUxFX1NRTF9TVEFOREFSRCAm JiAqZmllbGRbMF0gPT0gJy0nKQorCWlmIChJbnRlcnZhbFN0eWxlID09IElOVFNUWUxFX1NRTF9T VEFOREFSRCAmJiAqKGZpZWxkWzBdKSA9PSAnLScpCiAJewogCQkvKiBDaGVjayBmb3IgYWRkaXRp b25hbCBleHBsaWNpdCBzaWducyAqLwogCQlib29sCQltb3JlX3NpZ25zID0gZmFsc2U7CiAKIAkJ Zm9yIChpID0gMTsgaSA8IG5mOyBpKyspCiAJCXsKLQkJCWlmICgqZmllbGRbaV0gPT0gJy0nIHx8 ICpmaWVsZFtpXSA9PSAnKycpCisJCQlpZiAoKihmaWVsZFtpXSkgPT0gJy0nIHx8ICooZmllbGRb aV0pID09ICcrJykKIAkJCXsKIAkJCQltb3JlX3NpZ25zID0gdHJ1ZTsKIAkJCQlicmVhazsKLS0g CjIuMzMuMAoK --000000000000b5ad34064bca45fb--