From 600ec35c5b0bf503b3f437c5f378eadbc8d58601 Mon Sep 17 00:00:00 2001 From: Sylvain Defresne Date: Tue, 9 Aug 2016 12:43:39 -0700 Subject: [PATCH] Fail with a proper error message if input file is not found. Previously, if the input file was missing, the symupload tool on Mac would happily process, try to parse it (calling a method on nil) and fail when trying to create the payload to send to the server as one of the method raised a NSInvalidArgumentException when receiving a nil value. Change to code to instead check the file for existence which makes it easier to understand what is happening when part of the build system is misconfigured and invoke symupload without first creating the symbol file. BUG=449348 Change-Id: Icc0f08958114da4be0cbbd7a7c2aeef905bc0db1 Reviewed-on: https://chromium-review.googlesource.com/367260 Reviewed-by: Mark Mentovai --- src/tools/mac/symupload/symupload.m | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/tools/mac/symupload/symupload.m b/src/tools/mac/symupload/symupload.m index 179f8d50..a7cce7b0 100644 --- a/src/tools/mac/symupload/symupload.m +++ b/src/tools/mac/symupload/symupload.m @@ -38,6 +38,8 @@ // cpu: the CPU that the module was built for (x86 or ppc) // symbol_file: the contents of the breakpad-format symbol file +#include +#include #include #include @@ -165,6 +167,25 @@ SetupOptions(int argc, const char *argv[], Options *options) { exit(1); } + int fd = open(argv[optind], O_RDONLY); + if (fd < 0) { + fprintf(stderr, "%s: %s: %s\n", argv[0], argv[optind], strerror(errno)); + exit(1); + } + + struct stat statbuf; + if (fstat(fd, &statbuf) < 0) { + fprintf(stderr, "%s: %s: %s\n", argv[0], argv[optind], strerror(errno)); + close(fd); + exit(1); + } + close(fd); + + if (!S_ISREG(statbuf.st_mode)) { + fprintf(stderr, "%s: %s: not a regular file\n", argv[0], argv[optind]); + exit(1); + } + options->symbolsPath = [NSString stringWithUTF8String:argv[optind]]; options->uploadURLStr = [NSString stringWithUTF8String:argv[optind + 1]]; }