Cast operands instead of result to prevent overflow
diff --git a/lib/zip_dirent.c b/lib/zip_dirent.c
index 91ff3c2..1691071 100644
--- a/lib/zip_dirent.c
+++ b/lib/zip_dirent.c
@@ -596,7 +596,7 @@
 
     zde->extra_fields = _zip_ef_remove_internal(zde->extra_fields);
 
-    return (zip_int64_t)(size + variable_size);
+    return (zip_int64_t)size + (zip_int64_t)variable_size;
 }
 
 
diff --git a/lib/zip_string.c b/lib/zip_string.c
index a6edbc5..374bc3f 100644
--- a/lib/zip_string.c
+++ b/lib/zip_string.c
@@ -145,7 +145,7 @@
 	return NULL;
     }
 
-    if ((s->raw = (zip_uint8_t *)malloc((size_t)(length + 1))) == NULL) {
+    if ((s->raw = (zip_uint8_t *)malloc((size_t)length + 1)) == NULL) {
 	free(s);
 	return NULL;
     }