#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
return (ARCHIVE_OK);
} else if (strcmp(key, "threads") == 0) {
char *endptr;
+ unsigned long val;
if (value == NULL) {
archive_set_error(f->archive, ARCHIVE_ERRNO_MISC,
return (ARCHIVE_FAILED);
}
errno = 0;
- data->threads = (int)strtoul(value, &endptr, 10);
- if (errno != 0 || *endptr != '\0') {
+ val = strtoul(value, &endptr, 10);
+ if (errno != 0 || *endptr != '\0' || val > (unsigned)INT_MAX) {
data->threads = 1;
archive_set_error(f->archive, ARCHIVE_ERRNO_MISC,
"threads invalid");
return (ARCHIVE_FAILED);
}
+ data->threads = (int)val;
if (data->threads == 0) {
#ifdef HAVE_LZMA_STREAM_ENCODER_MT
data->threads = lzma_cputhreads();
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
if (string_to_number(value, &threads) != ARCHIVE_OK) {
return (ARCHIVE_WARN);
}
- if (threads < 0) {
+ if (threads < 0 || threads > INT_MAX) {
return (ARCHIVE_WARN);
}
if (threads == 0) {
}
if (strcmp(key, "threads") == 0) {
char *endptr;
+ unsigned long val;
if (value == NULL)
return (ARCHIVE_FAILED);
errno = 0;
- xar->opt_threads = (int)strtoul(value, &endptr, 10);
- if (errno != 0 || *endptr != '\0') {
+ val = strtoul(value, &endptr, 10);
+ if (errno != 0 || *endptr != '\0' || val > (unsigned)INT_MAX) {
xar->opt_threads = 1;
archive_set_error(&(a->archive),
ARCHIVE_ERRNO_MISC,
value);
return (ARCHIVE_FAILED);
}
+ xar->opt_threads = (int)val;
if (xar->opt_threads == 0) {
#ifdef HAVE_LZMA_STREAM_ENCODER_MT
xar->opt_threads = lzma_cputhreads();
return (ret);
} else if (strcmp(key, "compression-level") == 0) {
char *endptr;
+ unsigned long v;
if (val == NULL)
return (ARCHIVE_WARN);
errno = 0;
- zip->compression_level = (short)strtoul(val, &endptr, 10);
- if (errno != 0 || *endptr != '\0' || zip->compression_level < 0 ||
- zip->compression_level > 9) {
+ v = strtoul(val, &endptr, 10);
+ if (errno != 0 || *endptr != '\0' || v > 9) {
zip->compression_level = 6; // set to default
return (ARCHIVE_WARN);
}
+ zip->compression_level = (short)v;
if (zip->compression_level == 0) {
zip->requested_compression = COMPRESSION_STORE;
}
} else if (strcmp(key, "threads") == 0) {
char *endptr;
+ unsigned long v;
if (val == NULL)
return (ARCHIVE_FAILED);
errno = 0;
- zip->threads = (short)strtoul(val, &endptr, 10);
- if (errno != 0 || *endptr != '\0') {
+ v = strtoul(val, &endptr, 10);
+ if (errno != 0 || *endptr != '\0' || v > SHRT_MAX) {
zip->threads = 1;
archive_set_error(&(a->archive), ARCHIVE_ERRNO_MISC,
"Illegal value `%s'", val);
return (ARCHIVE_FAILED);
}
+ zip->threads = (short)v;
if (zip->threads == 0) {
#ifdef HAVE_LZMA_STREAM_ENCODER_MT
zip->threads = lzma_cputhreads();