From 4c736ea8fc046dc564f9167967a5dd92f07ed002 Mon Sep 17 00:00:00 2001 From: Damien George Date: Mon, 21 Aug 2017 20:47:22 +1000 Subject: [PATCH] extmod,unix: For uos.stat interpret st_size member as an unsigned int. This prevents large files (eg larger than 2gb on a 32-bit arch) from showing up as having a negative size. Fixes issue #3227. --- extmod/vfs_fat.c | 2 +- unix/modos.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/extmod/vfs_fat.c b/extmod/vfs_fat.c index 0ec3fe6d2e..b270541119 100644 --- a/extmod/vfs_fat.c +++ b/extmod/vfs_fat.c @@ -243,7 +243,7 @@ STATIC mp_obj_t fat_vfs_stat(mp_obj_t vfs_in, mp_obj_t path_in) { t->items[3] = MP_OBJ_NEW_SMALL_INT(0); // st_nlink t->items[4] = MP_OBJ_NEW_SMALL_INT(0); // st_uid t->items[5] = MP_OBJ_NEW_SMALL_INT(0); // st_gid - t->items[6] = MP_OBJ_NEW_SMALL_INT(fno.fsize); // st_size + t->items[6] = mp_obj_new_int_from_uint(fno.fsize); // st_size t->items[7] = MP_OBJ_NEW_SMALL_INT(seconds); // st_atime t->items[8] = MP_OBJ_NEW_SMALL_INT(seconds); // st_mtime t->items[9] = MP_OBJ_NEW_SMALL_INT(seconds); // st_ctime diff --git a/unix/modos.c b/unix/modos.c index 8b5d5790f3..5030fbb65b 100644 --- a/unix/modos.c +++ b/unix/modos.c @@ -58,7 +58,7 @@ STATIC mp_obj_t mod_os_stat(mp_obj_t path_in) { t->items[3] = MP_OBJ_NEW_SMALL_INT(sb.st_nlink); t->items[4] = MP_OBJ_NEW_SMALL_INT(sb.st_uid); t->items[5] = MP_OBJ_NEW_SMALL_INT(sb.st_gid); - t->items[6] = MP_OBJ_NEW_SMALL_INT(sb.st_size); + t->items[6] = mp_obj_new_int_from_uint(sb.st_size); t->items[7] = MP_OBJ_NEW_SMALL_INT(sb.st_atime); t->items[8] = MP_OBJ_NEW_SMALL_INT(sb.st_mtime); t->items[9] = MP_OBJ_NEW_SMALL_INT(sb.st_ctime);