* command: hashsum: md5sum reports wrong sum for the file named 4k.bin
@ 2017-12-20 10:48 Peter Mamonov
2017-12-21 10:48 ` Peter Mamonov
0 siblings, 1 reply; 13+ messages in thread
From: Peter Mamonov @ 2017-12-20 10:48 UTC (permalink / raw)
To: barebox
Hi,
The md5sum command reports wrong sum for a file named 4k.bin and, I guess, for
other files named alike. Here are the commands to reproduce the bug:
barebox@barebox sandbox:/ memcpy -s /dev/zero -d _4k.bin 0 0 4k
barebox@barebox sandbox:/ md5sum _4k.bin
620f0b67a91f7f74151bc5be745b7110 _4k.bin
barebox@barebox sandbox:/ cp _4k.bin 4k.bin
barebox@barebox sandbox:/ md5sum 4k.bin
d41d8cd98f00b204e9800998ecf8427e 4k.bin
barebox@barebox sandbox:/ cp 4k.bin __4k.bin
barebox@barebox sandbox:/ md5sum __4k.bin
620f0b67a91f7f74151bc5be745b7110 __4k.bin
barebox@barebox sandbox:/ version
barebox 2017.12.0 #4 Wed Dec 20 12:26:57 MSK 2017
barebox@barebox sandbox:/ Terminated
$ dd if=/dev/zero bs=4k count=1 | md5sum
...
620f0b67a91f7f74151bc5be745b7110 -
Regards,
Peter
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: command: hashsum: md5sum reports wrong sum for the file named 4k.bin
2017-12-20 10:48 command: hashsum: md5sum reports wrong sum for the file named 4k.bin Peter Mamonov
@ 2017-12-21 10:48 ` Peter Mamonov
2018-01-05 11:44 ` Sascha Hauer
0 siblings, 1 reply; 13+ messages in thread
From: Peter Mamonov @ 2017-12-21 10:48 UTC (permalink / raw)
To: barebox
On Wed, Dec 20, 2017 at 01:48:14PM +0300, Peter Mamonov wrote:
> Hi,
>
> The md5sum command reports wrong sum for a file named 4k.bin and, I guess, for
> other files named alike. Here are the commands to reproduce the bug:
The problem lays in __do_digest() function:
- it initializes variables `start` and `size` at commands/digest.c:38
- then it calls parse_area_spec(*argv, &start, &size) at commands/digest.c:42
- parse_area_spec() returns error as it should, however it changes the value
of the `start` at lib/misc.c:87.
- this causes digest algo to skip leading 4k of the data from the file.
I'm not quite sure what is the best solution:
- prevent parse_area_spec() from setting start if it fails?
- reinitialize start/size after unsuccessfull call to parse_area_spec()?
Regards,
Peter
>
> barebox@barebox sandbox:/ memcpy -s /dev/zero -d _4k.bin 0 0 4k
> barebox@barebox sandbox:/ md5sum _4k.bin
> 620f0b67a91f7f74151bc5be745b7110 _4k.bin
>
> barebox@barebox sandbox:/ cp _4k.bin 4k.bin
> barebox@barebox sandbox:/ md5sum 4k.bin
> d41d8cd98f00b204e9800998ecf8427e 4k.bin
>
> barebox@barebox sandbox:/ cp 4k.bin __4k.bin
> barebox@barebox sandbox:/ md5sum __4k.bin
> 620f0b67a91f7f74151bc5be745b7110 __4k.bin
>
> barebox@barebox sandbox:/ version
>
> barebox 2017.12.0 #4 Wed Dec 20 12:26:57 MSK 2017
>
> barebox@barebox sandbox:/ Terminated
>
> $ dd if=/dev/zero bs=4k count=1 | md5sum
> ...
> 620f0b67a91f7f74151bc5be745b7110 -
>
> Regards,
> Peter
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: command: hashsum: md5sum reports wrong sum for the file named 4k.bin
2017-12-21 10:48 ` Peter Mamonov
@ 2018-01-05 11:44 ` Sascha Hauer
2018-01-05 18:17 ` Peter Mamonov
0 siblings, 1 reply; 13+ messages in thread
From: Sascha Hauer @ 2018-01-05 11:44 UTC (permalink / raw)
To: Peter Mamonov; +Cc: barebox
Hi Peter,
On Thu, Dec 21, 2017 at 01:48:11PM +0300, Peter Mamonov wrote:
> On Wed, Dec 20, 2017 at 01:48:14PM +0300, Peter Mamonov wrote:
> > Hi,
> >
> > The md5sum command reports wrong sum for a file named 4k.bin and, I guess, for
> > other files named alike. Here are the commands to reproduce the bug:
>
> The problem lays in __do_digest() function:
> - it initializes variables `start` and `size` at commands/digest.c:38
> - then it calls parse_area_spec(*argv, &start, &size) at commands/digest.c:42
> - parse_area_spec() returns error as it should, however it changes the value
> of the `start` at lib/misc.c:87.
> - this causes digest algo to skip leading 4k of the data from the file.
>
> I'm not quite sure what is the best solution:
> - prevent parse_area_spec() from setting start if it fails?
> - reinitialize start/size after unsuccessfull call to parse_area_spec()?
preventing parse_area_spec() from modifying start and size if it fails
seems like a good idea.
However, this doesn't solve the problem, does it? parse_area_spec()
only fails because the dot in 4k.bin is not valid, but if you name
the file only '4k' then parse_area_spec() won't fail.
The problem is that we cannot know whether '4k' is a file or an area.
Right now I have no good idea how to make the command nonambiguous,
but this will require an incompatible change to the commands arguments.
Sascha
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: command: hashsum: md5sum reports wrong sum for the file named 4k.bin
2018-01-05 11:44 ` Sascha Hauer
@ 2018-01-05 18:17 ` Peter Mamonov
2018-01-09 11:10 ` Sascha Hauer
0 siblings, 1 reply; 13+ messages in thread
From: Peter Mamonov @ 2018-01-05 18:17 UTC (permalink / raw)
To: Sascha Hauer; +Cc: barebox
On Fri, Jan 05, 2018 at 12:44:19PM +0100, Sascha Hauer wrote:
> Hi Peter,
>
> On Thu, Dec 21, 2017 at 01:48:11PM +0300, Peter Mamonov wrote:
> > On Wed, Dec 20, 2017 at 01:48:14PM +0300, Peter Mamonov wrote:
> > > Hi,
> > >
> > > The md5sum command reports wrong sum for a file named 4k.bin and, I guess, for
> > > other files named alike. Here are the commands to reproduce the bug:
> >
> > The problem lays in __do_digest() function:
> > - it initializes variables `start` and `size` at commands/digest.c:38
> > - then it calls parse_area_spec(*argv, &start, &size) at commands/digest.c:42
> > - parse_area_spec() returns error as it should, however it changes the value
> > of the `start` at lib/misc.c:87.
> > - this causes digest algo to skip leading 4k of the data from the file.
> >
> > I'm not quite sure what is the best solution:
> > - prevent parse_area_spec() from setting start if it fails?
> > - reinitialize start/size after unsuccessfull call to parse_area_spec()?
>
> preventing parse_area_spec() from modifying start and size if it fails
> seems like a good idea.
>
> However, this doesn't solve the problem, does it? parse_area_spec()
> only fails because the dot in 4k.bin is not valid, but if you name
> the file only '4k' then parse_area_spec() won't fail.
> The problem is that we cannot know whether '4k' is a file or an area.
You are right. However, there is no ambiguity in the "4k.bin" and similar
cases, so we can fix at least this obvious problem.
Regards,
Peter
>
> Right now I have no good idea how to make the command nonambiguous,
> but this will require an incompatible change to the commands arguments.
>
> Sascha
>
>
> --
> Pengutronix e.K. | |
> Industrial Linux Solutions | http://www.pengutronix.de/ |
> Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
> Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: command: hashsum: md5sum reports wrong sum for the file named 4k.bin
2018-01-05 18:17 ` Peter Mamonov
@ 2018-01-09 11:10 ` Sascha Hauer
2018-01-09 14:21 ` [PATCH] lib: parse_area_spec: don't modify *start and *size values if parse failed Peter Mamonov
0 siblings, 1 reply; 13+ messages in thread
From: Sascha Hauer @ 2018-01-09 11:10 UTC (permalink / raw)
To: Peter Mamonov; +Cc: barebox
On Fri, Jan 05, 2018 at 09:17:30PM +0300, Peter Mamonov wrote:
> On Fri, Jan 05, 2018 at 12:44:19PM +0100, Sascha Hauer wrote:
> > Hi Peter,
> >
> > On Thu, Dec 21, 2017 at 01:48:11PM +0300, Peter Mamonov wrote:
> > > On Wed, Dec 20, 2017 at 01:48:14PM +0300, Peter Mamonov wrote:
> > > > Hi,
> > > >
> > > > The md5sum command reports wrong sum for a file named 4k.bin and, I guess, for
> > > > other files named alike. Here are the commands to reproduce the bug:
> > >
> > > The problem lays in __do_digest() function:
> > > - it initializes variables `start` and `size` at commands/digest.c:38
> > > - then it calls parse_area_spec(*argv, &start, &size) at commands/digest.c:42
> > > - parse_area_spec() returns error as it should, however it changes the value
> > > of the `start` at lib/misc.c:87.
> > > - this causes digest algo to skip leading 4k of the data from the file.
> > >
> > > I'm not quite sure what is the best solution:
> > > - prevent parse_area_spec() from setting start if it fails?
> > > - reinitialize start/size after unsuccessfull call to parse_area_spec()?
> >
> > preventing parse_area_spec() from modifying start and size if it fails
> > seems like a good idea.
> >
> > However, this doesn't solve the problem, does it? parse_area_spec()
> > only fails because the dot in 4k.bin is not valid, but if you name
> > the file only '4k' then parse_area_spec() won't fail.
> > The problem is that we cannot know whether '4k' is a file or an area.
>
> You are right. However, there is no ambiguity in the "4k.bin" and similar
> cases, so we can fix at least this obvious problem.
Indeed, so a patch for parse_area_spec() would be welcomed.
Sascha
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH] lib: parse_area_spec: don't modify *start and *size values if parse failed
2018-01-09 11:10 ` Sascha Hauer
@ 2018-01-09 14:21 ` Peter Mamonov
2018-01-11 8:15 ` Sascha Hauer
0 siblings, 1 reply; 13+ messages in thread
From: Peter Mamonov @ 2018-01-09 14:21 UTC (permalink / raw)
To: s.hauer; +Cc: barebox, Peter Mamonov
Signed-off-by: Peter Mamonov <pmamonov@gmail.com>
---
lib/misc.c | 46 ++++++++++++++++++++++++++++++++--------------
1 file changed, 32 insertions(+), 14 deletions(-)
diff --git a/lib/misc.c b/lib/misc.c
index 62ddd6677..c7d5a0ca5 100644
--- a/lib/misc.c
+++ b/lib/misc.c
@@ -79,38 +79,56 @@ EXPORT_SYMBOL(strtoul_suffix);
int parse_area_spec(const char *str, loff_t *start, loff_t *size)
{
char *endp;
- loff_t end;
+ loff_t end, _start, _size;
+ int ret = -1;
if (!isdigit(*str))
return -1;
- *start = strtoull_suffix(str, &endp, 0);
+ _start = strtoull_suffix(str, &endp, 0);
str = endp;
if (!*str) {
/* beginning given, but no size, assume maximum size */
- *size = ~0;
- return 0;
+ _size = ~0;
+ ret = 0;
}
- if (*str == '-') {
+ if (ret && *str == '-') {
/* beginning and end given */
- end = strtoull_suffix(str + 1, NULL, 0);
- if (end < *start) {
+ if (!isdigit(*(str + 1)))
+ return ret;
+
+ end = strtoull_suffix(str + 1, &endp, 0);
+ str = endp;
+ if (end < _start) {
printf("end < start\n");
- return -1;
+ return ret;
}
- *size = end - *start + 1;
- return 0;
+ _size = end - _start + 1;
+ ret = 0;
}
- if (*str == '+') {
+ if (ret && *str == '+') {
/* beginning and size given */
- *size = strtoull_suffix(str + 1, NULL, 0);
- return 0;
+ if (!isdigit(*(str + 1)))
+ return ret;
+
+ _size = strtoull_suffix(str + 1, &endp, 0);
+ str = endp;
+ ret = 0;
+ }
+
+ if (!ret && *str)
+ /* trailing symbols indicate invalid area spec */
+ ret = -1;
+
+ if (!ret) {
+ *start = _start;
+ *size = _size;
}
- return -1;
+ return ret;
}
EXPORT_SYMBOL(parse_area_spec);
--
2.11.0
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] lib: parse_area_spec: don't modify *start and *size values if parse failed
2018-01-09 14:21 ` [PATCH] lib: parse_area_spec: don't modify *start and *size values if parse failed Peter Mamonov
@ 2018-01-11 8:15 ` Sascha Hauer
2018-01-11 17:28 ` Peter Mamonov
2018-01-15 11:32 ` [PATCH v2 1/3] lib: parse_area_spec: don't modify *start value " Peter Mamonov
0 siblings, 2 replies; 13+ messages in thread
From: Sascha Hauer @ 2018-01-11 8:15 UTC (permalink / raw)
To: Peter Mamonov; +Cc: barebox
Hi Peter,
On Tue, Jan 09, 2018 at 05:21:20PM +0300, Peter Mamonov wrote:
> Signed-off-by: Peter Mamonov <pmamonov@gmail.com>
> ---
> lib/misc.c | 46 ++++++++++++++++++++++++++++++++--------------
> 1 file changed, 32 insertions(+), 14 deletions(-)
>
> diff --git a/lib/misc.c b/lib/misc.c
> index 62ddd6677..c7d5a0ca5 100644
> --- a/lib/misc.c
> +++ b/lib/misc.c
> @@ -79,38 +79,56 @@ EXPORT_SYMBOL(strtoul_suffix);
> int parse_area_spec(const char *str, loff_t *start, loff_t *size)
> {
> char *endp;
> - loff_t end;
> + loff_t end, _start, _size;
> + int ret = -1;
>
> if (!isdigit(*str))
> return -1;
>
> - *start = strtoull_suffix(str, &endp, 0);
> + _start = strtoull_suffix(str, &endp, 0);
>
> str = endp;
>
> if (!*str) {
> /* beginning given, but no size, assume maximum size */
> - *size = ~0;
> - return 0;
> + _size = ~0;
> + ret = 0;
> }
>
> - if (*str == '-') {
> + if (ret && *str == '-') {
> /* beginning and end given */
> - end = strtoull_suffix(str + 1, NULL, 0);
> - if (end < *start) {
> + if (!isdigit(*(str + 1)))
> + return ret;
> +
> + end = strtoull_suffix(str + 1, &endp, 0);
> + str = endp;
> + if (end < _start) {
> printf("end < start\n");
> - return -1;
> + return ret;
> }
> - *size = end - *start + 1;
> - return 0;
> + _size = end - _start + 1;
> + ret = 0;
> }
>
> - if (*str == '+') {
> + if (ret && *str == '+') {
> /* beginning and size given */
> - *size = strtoull_suffix(str + 1, NULL, 0);
> - return 0;
> + if (!isdigit(*(str + 1)))
> + return ret;
> +
> + _size = strtoull_suffix(str + 1, &endp, 0);
> + str = endp;
> + ret = 0;
> + }
> +
> + if (!ret && *str)
> + /* trailing symbols indicate invalid area spec */
> + ret = -1;
Is this correct? I would assume a whitespace should be fine. We only
do not get trailing whitespaces in here because current users pass in
argv[] elements which are split up at whitespaces. The check would
also deserve a separate patch.
> +
> + if (!ret) {
> + *start = _start;
> + *size = _size;
> }
>
> - return -1;
> + return ret;
I find this patch unnecessarily hard to review and also the end result
doesn't look optimal. Could you create a 'success:' label and jump to it
when everything is fine? That would make the additional if(ret) and
if(!ret) checks unnecessary.
Sascha
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH] lib: parse_area_spec: don't modify *start and *size values if parse failed
2018-01-11 8:15 ` Sascha Hauer
@ 2018-01-11 17:28 ` Peter Mamonov
2018-01-15 11:32 ` [PATCH v2 1/3] lib: parse_area_spec: don't modify *start value " Peter Mamonov
1 sibling, 0 replies; 13+ messages in thread
From: Peter Mamonov @ 2018-01-11 17:28 UTC (permalink / raw)
To: Sascha Hauer; +Cc: barebox
Hi, Sasha,
On Thu, Jan 11, 2018 at 09:15:31AM +0100, Sascha Hauer wrote:
> Hi Peter,
>
> On Tue, Jan 09, 2018 at 05:21:20PM +0300, Peter Mamonov wrote:
> > Signed-off-by: Peter Mamonov <pmamonov@gmail.com>
> > ---
> > lib/misc.c | 46 ++++++++++++++++++++++++++++++++--------------
> > 1 file changed, 32 insertions(+), 14 deletions(-)
> >
> > diff --git a/lib/misc.c b/lib/misc.c
> > index 62ddd6677..c7d5a0ca5 100644
> > --- a/lib/misc.c
> > +++ b/lib/misc.c
> > @@ -79,38 +79,56 @@ EXPORT_SYMBOL(strtoul_suffix);
> > int parse_area_spec(const char *str, loff_t *start, loff_t *size)
> > {
> > char *endp;
> > - loff_t end;
> > + loff_t end, _start, _size;
> > + int ret = -1;
> >
> > if (!isdigit(*str))
> > return -1;
> >
> > - *start = strtoull_suffix(str, &endp, 0);
> > + _start = strtoull_suffix(str, &endp, 0);
> >
> > str = endp;
> >
> > if (!*str) {
> > /* beginning given, but no size, assume maximum size */
> > - *size = ~0;
> > - return 0;
> > + _size = ~0;
> > + ret = 0;
> > }
> >
> > - if (*str == '-') {
> > + if (ret && *str == '-') {
> > /* beginning and end given */
> > - end = strtoull_suffix(str + 1, NULL, 0);
> > - if (end < *start) {
> > + if (!isdigit(*(str + 1)))
> > + return ret;
> > +
> > + end = strtoull_suffix(str + 1, &endp, 0);
> > + str = endp;
> > + if (end < _start) {
> > printf("end < start\n");
> > - return -1;
> > + return ret;
> > }
> > - *size = end - *start + 1;
> > - return 0;
> > + _size = end - _start + 1;
> > + ret = 0;
> > }
> >
> > - if (*str == '+') {
> > + if (ret && *str == '+') {
> > /* beginning and size given */
> > - *size = strtoull_suffix(str + 1, NULL, 0);
> > - return 0;
> > + if (!isdigit(*(str + 1)))
> > + return ret;
> > +
> > + _size = strtoull_suffix(str + 1, &endp, 0);
> > + str = endp;
> > + ret = 0;
> > + }
> > +
> > + if (!ret && *str)
> > + /* trailing symbols indicate invalid area spec */
> > + ret = -1;
>
> Is this correct? I would assume a whitespace should be fine. We only
> do not get trailing whitespaces in here because current users pass in
> argv[] elements which are split up at whitespaces.
Ok, whitespaces " \n\r\t" are fine too. Will fix it in the next revision.
> The check would
> also deserve a separate patch.
My proposal is to fix `parse_area_spec` so it can distinguish a valid memory
area specification from the following sample file names:
4k.bin
4k-8k.txt
4096+1k_of_random_bytes
Without this final check parse_area_spec would return 0 for the last two
samples, which are not valid area specifications.
>
> > +
> > + if (!ret) {
> > + *start = _start;
> > + *size = _size;
> > }
> >
> > - return -1;
> > + return ret;
>
> I find this patch unnecessarily hard to review and also the end result
> doesn't look optimal. Could you create a 'success:' label and jump to it
> when everything is fine? That would make the additional if(ret) and
> if(!ret) checks unnecessary.
Sounds good, will fix it as well.
Regards,
Peter
>
> Sascha
>
> --
> Pengutronix e.K. | |
> Industrial Linux Solutions | http://www.pengutronix.de/ |
> Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
> Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 1/3] lib: parse_area_spec: don't modify *start value if parse failed
2018-01-11 8:15 ` Sascha Hauer
2018-01-11 17:28 ` Peter Mamonov
@ 2018-01-15 11:32 ` Peter Mamonov
2018-01-15 11:32 ` [PATCH v2 2/3] lib: parse_area_spec: part of the area spec after -/+ should start with a digit Peter Mamonov
` (2 more replies)
1 sibling, 3 replies; 13+ messages in thread
From: Peter Mamonov @ 2018-01-15 11:32 UTC (permalink / raw)
To: s.hauer; +Cc: barebox, Peter Mamonov
Signed-off-by: Peter Mamonov <pmamonov@gmail.com>
---
lib/misc.c | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/lib/misc.c b/lib/misc.c
index 62ddd6677..1767043d1 100644
--- a/lib/misc.c
+++ b/lib/misc.c
@@ -79,19 +79,19 @@ EXPORT_SYMBOL(strtoul_suffix);
int parse_area_spec(const char *str, loff_t *start, loff_t *size)
{
char *endp;
- loff_t end;
+ loff_t end, _start;
if (!isdigit(*str))
return -1;
- *start = strtoull_suffix(str, &endp, 0);
+ _start = strtoull_suffix(str, &endp, 0);
str = endp;
if (!*str) {
/* beginning given, but no size, assume maximum size */
*size = ~0;
- return 0;
+ goto success;
}
if (*str == '-') {
@@ -102,15 +102,19 @@ int parse_area_spec(const char *str, loff_t *start, loff_t *size)
return -1;
}
*size = end - *start + 1;
- return 0;
+ goto success;
}
if (*str == '+') {
/* beginning and size given */
*size = strtoull_suffix(str + 1, NULL, 0);
- return 0;
+ goto success;
}
return -1;
+
+success:
+ *start = _start;
+ return 0;
}
EXPORT_SYMBOL(parse_area_spec);
--
2.11.0
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 2/3] lib: parse_area_spec: part of the area spec after -/+ should start with a digit
2018-01-15 11:32 ` [PATCH v2 1/3] lib: parse_area_spec: don't modify *start value " Peter Mamonov
@ 2018-01-15 11:32 ` Peter Mamonov
2018-01-15 11:32 ` [PATCH v2 3/3] lib: parse_area_spec: no extra symbols after area spec are allowed except for spaces Peter Mamonov
2018-01-17 8:11 ` [PATCH v2 1/3] lib: parse_area_spec: don't modify *start value if parse failed Sascha Hauer
2 siblings, 0 replies; 13+ messages in thread
From: Peter Mamonov @ 2018-01-15 11:32 UTC (permalink / raw)
To: s.hauer; +Cc: barebox, Peter Mamonov
Signed-off-by: Peter Mamonov <pmamonov@gmail.com>
---
lib/misc.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/lib/misc.c b/lib/misc.c
index 1767043d1..fc2c45aa4 100644
--- a/lib/misc.c
+++ b/lib/misc.c
@@ -96,6 +96,9 @@ int parse_area_spec(const char *str, loff_t *start, loff_t *size)
if (*str == '-') {
/* beginning and end given */
+ if (!isdigit(*(str + 1)))
+ return -1;
+
end = strtoull_suffix(str + 1, NULL, 0);
if (end < *start) {
printf("end < start\n");
@@ -107,6 +110,9 @@ int parse_area_spec(const char *str, loff_t *start, loff_t *size)
if (*str == '+') {
/* beginning and size given */
+ if (!isdigit(*(str + 1)))
+ return -1;
+
*size = strtoull_suffix(str + 1, NULL, 0);
goto success;
}
--
2.11.0
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 3/3] lib: parse_area_spec: no extra symbols after area spec are allowed except for spaces
2018-01-15 11:32 ` [PATCH v2 1/3] lib: parse_area_spec: don't modify *start value " Peter Mamonov
2018-01-15 11:32 ` [PATCH v2 2/3] lib: parse_area_spec: part of the area spec after -/+ should start with a digit Peter Mamonov
@ 2018-01-15 11:32 ` Peter Mamonov
2018-01-17 8:11 ` [PATCH v2 1/3] lib: parse_area_spec: don't modify *start value if parse failed Sascha Hauer
2 siblings, 0 replies; 13+ messages in thread
From: Peter Mamonov @ 2018-01-15 11:32 UTC (permalink / raw)
To: s.hauer; +Cc: barebox, Peter Mamonov
Signed-off-by: Peter Mamonov <pmamonov@gmail.com>
---
lib/misc.c | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/lib/misc.c b/lib/misc.c
index fc2c45aa4..4b62f8771 100644
--- a/lib/misc.c
+++ b/lib/misc.c
@@ -79,7 +79,7 @@ EXPORT_SYMBOL(strtoul_suffix);
int parse_area_spec(const char *str, loff_t *start, loff_t *size)
{
char *endp;
- loff_t end, _start;
+ loff_t end, _start, _size;
if (!isdigit(*str))
return -1;
@@ -90,7 +90,7 @@ int parse_area_spec(const char *str, loff_t *start, loff_t *size)
if (!*str) {
/* beginning given, but no size, assume maximum size */
- *size = ~0;
+ _size = ~0;
goto success;
}
@@ -99,12 +99,13 @@ int parse_area_spec(const char *str, loff_t *start, loff_t *size)
if (!isdigit(*(str + 1)))
return -1;
- end = strtoull_suffix(str + 1, NULL, 0);
+ end = strtoull_suffix(str + 1, &endp, 0);
+ str = endp;
if (end < *start) {
printf("end < start\n");
return -1;
}
- *size = end - *start + 1;
+ _size = end - *start + 1;
goto success;
}
@@ -113,14 +114,18 @@ int parse_area_spec(const char *str, loff_t *start, loff_t *size)
if (!isdigit(*(str + 1)))
return -1;
- *size = strtoull_suffix(str + 1, NULL, 0);
+ _size = strtoull_suffix(str + 1, &endp, 0);
+ str = endp;
goto success;
}
return -1;
success:
+ if (*str && !isspace(*str))
+ return -1;
*start = _start;
+ *size = _size;
return 0;
}
EXPORT_SYMBOL(parse_area_spec);
--
2.11.0
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 1/3] lib: parse_area_spec: don't modify *start value if parse failed
2018-01-15 11:32 ` [PATCH v2 1/3] lib: parse_area_spec: don't modify *start value " Peter Mamonov
2018-01-15 11:32 ` [PATCH v2 2/3] lib: parse_area_spec: part of the area spec after -/+ should start with a digit Peter Mamonov
2018-01-15 11:32 ` [PATCH v2 3/3] lib: parse_area_spec: no extra symbols after area spec are allowed except for spaces Peter Mamonov
@ 2018-01-17 8:11 ` Sascha Hauer
2018-01-17 9:31 ` Peter Mamonov
2 siblings, 1 reply; 13+ messages in thread
From: Sascha Hauer @ 2018-01-17 8:11 UTC (permalink / raw)
To: Peter Mamonov; +Cc: barebox
On Mon, Jan 15, 2018 at 02:32:31PM +0300, Peter Mamonov wrote:
> Signed-off-by: Peter Mamonov <pmamonov@gmail.com>
> ---
> lib/misc.c | 14 +++++++++-----
> 1 file changed, 9 insertions(+), 5 deletions(-)
>
> diff --git a/lib/misc.c b/lib/misc.c
> index 62ddd6677..1767043d1 100644
> --- a/lib/misc.c
> +++ b/lib/misc.c
> @@ -79,19 +79,19 @@ EXPORT_SYMBOL(strtoul_suffix);
> int parse_area_spec(const char *str, loff_t *start, loff_t *size)
> {
> char *endp;
> - loff_t end;
> + loff_t end, _start;
>
> if (!isdigit(*str))
> return -1;
>
> - *start = strtoull_suffix(str, &endp, 0);
> + _start = strtoull_suffix(str, &endp, 0);
>
> str = endp;
>
> if (!*str) {
> /* beginning given, but no size, assume maximum size */
> *size = ~0;
> - return 0;
> + goto success;
> }
>
> if (*str == '-') {
> @@ -102,15 +102,19 @@ int parse_area_spec(const char *str, loff_t *start, loff_t *size)
> return -1;
> }
> *size = end - *start + 1;
Applied with two little changes: It must be _start above and in another
case not visible in the patch. *start is not yet initialized.
Sascha
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 1/3] lib: parse_area_spec: don't modify *start value if parse failed
2018-01-17 8:11 ` [PATCH v2 1/3] lib: parse_area_spec: don't modify *start value if parse failed Sascha Hauer
@ 2018-01-17 9:31 ` Peter Mamonov
0 siblings, 0 replies; 13+ messages in thread
From: Peter Mamonov @ 2018-01-17 9:31 UTC (permalink / raw)
To: Sascha Hauer; +Cc: barebox
On Wed, Jan 17, 2018 at 09:11:12AM +0100, Sascha Hauer wrote:
> On Mon, Jan 15, 2018 at 02:32:31PM +0300, Peter Mamonov wrote:
> > Signed-off-by: Peter Mamonov <pmamonov@gmail.com>
> > ---
> > lib/misc.c | 14 +++++++++-----
> > 1 file changed, 9 insertions(+), 5 deletions(-)
> >
> > diff --git a/lib/misc.c b/lib/misc.c
> > index 62ddd6677..1767043d1 100644
> > --- a/lib/misc.c
> > +++ b/lib/misc.c
> > @@ -79,19 +79,19 @@ EXPORT_SYMBOL(strtoul_suffix);
> > int parse_area_spec(const char *str, loff_t *start, loff_t *size)
> > {
> > char *endp;
> > - loff_t end;
> > + loff_t end, _start;
> >
> > if (!isdigit(*str))
> > return -1;
> >
> > - *start = strtoull_suffix(str, &endp, 0);
> > + _start = strtoull_suffix(str, &endp, 0);
> >
> > str = endp;
> >
> > if (!*str) {
> > /* beginning given, but no size, assume maximum size */
> > *size = ~0;
> > - return 0;
> > + goto success;
> > }
> >
> > if (*str == '-') {
> > @@ -102,15 +102,19 @@ int parse_area_spec(const char *str, loff_t *start, loff_t *size)
> > return -1;
> > }
> > *size = end - *start + 1;
>
> Applied with two little changes: It must be _start above and in another
> case not visible in the patch. *start is not yet initialized.
Thanks for correction. Actually these changes were present in the original
patch, but I've missed them while rearranging it.
Regards,
Peter
>
> Sascha
>
>
> --
> Pengutronix e.K. | |
> Industrial Linux Solutions | http://www.pengutronix.de/ |
> Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
> Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2018-01-17 9:31 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-12-20 10:48 command: hashsum: md5sum reports wrong sum for the file named 4k.bin Peter Mamonov
2017-12-21 10:48 ` Peter Mamonov
2018-01-05 11:44 ` Sascha Hauer
2018-01-05 18:17 ` Peter Mamonov
2018-01-09 11:10 ` Sascha Hauer
2018-01-09 14:21 ` [PATCH] lib: parse_area_spec: don't modify *start and *size values if parse failed Peter Mamonov
2018-01-11 8:15 ` Sascha Hauer
2018-01-11 17:28 ` Peter Mamonov
2018-01-15 11:32 ` [PATCH v2 1/3] lib: parse_area_spec: don't modify *start value " Peter Mamonov
2018-01-15 11:32 ` [PATCH v2 2/3] lib: parse_area_spec: part of the area spec after -/+ should start with a digit Peter Mamonov
2018-01-15 11:32 ` [PATCH v2 3/3] lib: parse_area_spec: no extra symbols after area spec are allowed except for spaces Peter Mamonov
2018-01-17 8:11 ` [PATCH v2 1/3] lib: parse_area_spec: don't modify *start value if parse failed Sascha Hauer
2018-01-17 9:31 ` Peter Mamonov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox