]> granicus.if.org Git - transmission/commitdiff
Don't crash if path passed to tr-create doesn't exist
authorMike Gelfand <mikedld@mikedld.com>
Wed, 24 Jan 2018 20:17:05 +0000 (23:17 +0300)
committerMike Gelfand <mikedld@mikedld.com>
Wed, 24 Jan 2018 20:45:13 +0000 (23:45 +0300)
libtransmission/makemeta.c
utils/create.c

index 86e09cebe82f561d0b8f48c23480d047894a80f7..462c4bcbc2529b11593fab0526c4ca6e55c15817 100644 (file)
@@ -134,10 +134,18 @@ static int builderFileCompare(void const* va, void const* vb)
 
 tr_metainfo_builder* tr_metaInfoBuilderCreate(char const* topFileArg)
 {
+    char* const real_top = tr_sys_path_resolve(topFileArg, NULL);
+
+    if (real_top == NULL)
+    {
+        /* TODO: Better error reporting */
+        return NULL;
+    }
+
     struct FileList* files;
     tr_metainfo_builder* ret = tr_new0(tr_metainfo_builder, 1);
 
-    ret->top = tr_sys_path_resolve(topFileArg, NULL);
+    ret->top = real_top;
 
     {
         tr_sys_path_info info;
index 675a2d29a0a65dcaec78cf40293ef50ccb3a71dc..2b00dd81de60dc4f41e54504e71175a98f8df14b 100644 (file)
@@ -192,6 +192,12 @@ int tr_main(int argc, char* argv[])
 
     b = tr_metaInfoBuilderCreate(infile);
 
+    if (b == NULL)
+    {
+        fprintf(stderr, "ERROR: Cannot find specified input file or directory.\n");
+        return EXIT_FAILURE;
+    }
+
     if (piecesize_kib != 0)
     {
         tr_metaInfoBuilderSetPieceSize(b, piecesize_kib * KiB);