Commit Diff


commit - e4a6dbc6cd4d9ac4f616b16388061ef0f8fec303
commit + aec48c6cc2cd132e59d0286d87f2b3377d62eb93
blob - 0d75dac8cda60fb9240db06ad390b363b234b780
blob + 216f9c3eb81dab0bb0853b2b2ef04a1ef07da2d1
--- got/got.c
+++ got/got.c
@@ -7941,6 +7941,7 @@ cmd_patch(int argc, char *argv[])
 	const struct got_error *error = NULL, *close_error = NULL;
 	struct got_worktree *worktree = NULL;
 	struct got_repository *repo = NULL;
+	struct stat sb;
 	const char *errstr;
 	char *cwd = NULL;
 	int ch, nop = 0, strip = -1, reverse = 0;
@@ -7980,6 +7981,14 @@ cmd_patch(int argc, char *argv[])
 			error = got_error_from_errno2("open", argv[0]);
 			return error;
 		}
+		if (fstat(patchfd, &sb) == -1) {
+			error = got_error_from_errno2("fstat", argv[0]);
+			goto done;
+		}
+		if (!S_ISREG(sb.st_mode)) {
+			error = got_error_path(argv[0], GOT_ERR_BAD_FILETYPE);
+			goto done;
+		}
 	} else
 		usage_patch();