Skip to content

Commit 100fb8f

Browse files
committed
BUG: handle non-existent files in parser. close #2428
1 parent 0b6b472 commit 100fb8f

File tree

2 files changed

+11
-0
lines changed

2 files changed

+11
-0
lines changed

pandas/io/tests/test_parsers.py

+4
Original file line numberDiff line numberDiff line change
@@ -1297,6 +1297,10 @@ def test_bool_na_values(self):
12971297

12981298
tm.assert_frame_equal(result, expected)
12991299

1300+
def test_nonexistent_path(self):
1301+
# don't segfault pls #2428
1302+
path = '%s.csv' % tm.rands(10)
1303+
self.assertRaises(Exception, self.read_csv, path)
13001304

13011305
class TestPythonParser(ParserTests, unittest.TestCase):
13021306

pandas/src/parser/io.c

+7
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@
88
void *new_file_source(char *fname, size_t buffer_size) {
99
file_source *fs = (file_source *) malloc(sizeof(file_source));
1010
fs->fp = fopen(fname, "rb");
11+
12+
if (fs->fp == NULL) {
13+
free(fs);
14+
return NULL;
15+
}
1116
setbuf(fs->fp, NULL);
1217

1318
fs->initial_file_pos = ftell(fs->fp);
@@ -59,6 +64,8 @@ void* new_rd_source(PyObject *obj) {
5964

6065
int del_file_source(void *fs) {
6166
// fseek(FS(fs)->fp, FS(fs)->initial_file_pos, SEEK_SET);
67+
if (fs == NULL)
68+
return 0;
6269

6370
/* allocated on the heap */
6471
free(FS(fs)->buffer);

0 commit comments

Comments
 (0)