@@ -1140,7 +1140,6 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict)
11401140# endif
11411141 if (fd != -1 && fstat (fd , & st ) == 0 && S_ISREG (st .st_mode )) {
11421142 if (map_size == 0 ) {
1143- off_t calc_size ;
11441143 if (st .st_size == 0 ) {
11451144 PyErr_SetString (PyExc_ValueError ,
11461145 "cannot mmap an empty file" );
@@ -1151,13 +1150,12 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict)
11511150 "mmap offset is greater than file size" );
11521151 return NULL ;
11531152 }
1154- calc_size = st .st_size - offset ;
1155- map_size = calc_size ;
1156- if (map_size != calc_size ) {
1153+ if (st .st_size - offset > PY_SSIZE_T_MAX ) {
11571154 PyErr_SetString (PyExc_ValueError ,
11581155 "mmap length is too large" );
1159- return NULL ;
1160- }
1156+ return NULL ;
1157+ }
1158+ map_size = (Py_ssize_t ) (st .st_size - offset );
11611159 } else if (offset + (size_t )map_size > st .st_size ) {
11621160 PyErr_SetString (PyExc_ValueError ,
11631161 "mmap length is greater than file size" );
@@ -1354,11 +1352,13 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict)
13541352 Py_DECREF (m_obj );
13551353 return NULL ;
13561354 }
1357- if (offset - size > PY_SSIZE_T_MAX )
1358- /* Map area too large to fit in memory */
1359- m_obj -> size = (Py_ssize_t ) - 1 ;
1360- else
1361- m_obj -> size = (Py_ssize_t ) (size - offset );
1355+ if (size - offset > PY_SSIZE_T_MAX ) {
1356+ PyErr_SetString (PyExc_ValueError ,
1357+ "mmap length is too large" );
1358+ Py_DECREF (m_obj );
1359+ return NULL ;
1360+ }
1361+ m_obj -> size = (Py_ssize_t ) (size - offset );
13621362 } else {
13631363 m_obj -> size = map_size ;
13641364 size = offset + map_size ;
0 commit comments