From 4c736ea8fc046dc564f9167967a5dd92f07ed002 Mon Sep 17 00:00:00 2001
From: Damien George <damien.p.george@gmail.com>
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 0ec3fe6d2..b27054111 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 8b5d5790f..5030fbb65 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);
-- 
GitLab