Skip to content

Commit c2b80cd

Browse files
committed
handle oom error as IOException
1 parent b6d0107 commit c2b80cd

File tree

3 files changed

+31
-0
lines changed

3 files changed

+31
-0
lines changed

firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/metadata/MetaDataStore.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ public void writeUserData(String sessionId, String userId) {
6363
writer.flush();
6464
} catch (Exception e) {
6565
Logger.getLogger().w("Error serializing user metadata.", e);
66+
} catch (OutOfMemoryError e) {
67+
Logger.getLogger().w("OOM serializing user metadata.", e);
6668
} finally {
6769
CommonUtils.closeOrLog(writer, "Failed to close user metadata file.");
6870
}
@@ -86,6 +88,9 @@ public String readUserId(String sessionId) {
8688
} catch (Exception e) {
8789
Logger.getLogger().w("Error deserializing user metadata.", e);
8890
safeDeleteCorruptFile(f);
91+
} catch (OutOfMemoryError e) {
92+
Logger.getLogger().w("OOM deserializing user metadata.", e);
93+
safeDeleteCorruptFile(f);
8994
} finally {
9095
CommonUtils.closeOrLog(is, "Failed to close user metadata file.");
9196
}
@@ -108,6 +113,9 @@ public void writeKeyData(String sessionId, Map<String, String> keyData, boolean
108113
} catch (Exception e) {
109114
Logger.getLogger().w("Error serializing key/value metadata.", e);
110115
safeDeleteCorruptFile(f);
116+
} catch (OutOfMemoryError e) {
117+
Logger.getLogger().w("OOM serializing key/value metadata.", e);
118+
safeDeleteCorruptFile(f);
111119
} finally {
112120
CommonUtils.closeOrLog(writer, "Failed to close key/value metadata file.");
113121
}
@@ -132,6 +140,9 @@ Map<String, String> readKeyData(String sessionId, boolean isInternal) {
132140
} catch (Exception e) {
133141
Logger.getLogger().w("Error deserializing user metadata.", e);
134142
safeDeleteCorruptFile(f);
143+
} catch (OutOfMemoryError e) {
144+
Logger.getLogger().w("OOM deserializing user metadata.", e);
145+
safeDeleteCorruptFile(f);
135146
} finally {
136147
CommonUtils.closeOrLog(is, "Failed to close user metadata file.");
137148
}
@@ -155,6 +166,9 @@ public List<RolloutAssignment> readRolloutsState(String sessionId) {
155166
} catch (Exception e) {
156167
Logger.getLogger().w("Error deserializing rollouts state.", e);
157168
safeDeleteCorruptFile(f);
169+
} catch (OutOfMemoryError e) {
170+
Logger.getLogger().w("OOM deserializing rollouts state.", e);
171+
safeDeleteCorruptFile(f);
158172
} finally {
159173
CommonUtils.closeOrLog(is, "Failed to close rollouts state file.");
160174
}
@@ -177,6 +191,9 @@ public void writeRolloutState(String sessionId, List<RolloutAssignment> rollouts
177191
} catch (Exception e) {
178192
Logger.getLogger().w("Error serializing rollouts state.", e);
179193
safeDeleteCorruptFile(f);
194+
} catch (OutOfMemoryError e) {
195+
Logger.getLogger().w("OOM serializing rollouts state.", e);
196+
safeDeleteCorruptFile(f);
180197
} finally {
181198
CommonUtils.closeOrLog(writer, "Failed to close rollouts state file.");
182199
}

firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/metadata/QueueFileLogStore.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,8 @@ private void doWriteToLog(long timestamp, String msg) {
176176
}
177177
} catch (IOException e) {
178178
Logger.getLogger().e("There was a problem writing to the Crashlytics log.", e);
179+
} catch (OutOfMemoryError e) {
180+
Logger.getLogger().e("OOM when writing to the Crashlytics log.", e);
179181
}
180182
}
181183
}

firebase-crashlytics/src/main/java/com/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,10 @@ private static int oldestEventFileFirst(@NonNull File f1, @NonNull File f2) {
413413
private static void writeTextFile(File file, String text) throws IOException {
414414
try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file), UTF_8)) {
415415
writer.write(text);
416+
} catch (OutOfMemoryError e) {
417+
Logger.getLogger()
418+
.w("Write text file out of memory.", e);
419+
throw new IOException("out of memory");
416420
}
417421
}
418422

@@ -421,6 +425,10 @@ private static void writeTextFile(File file, String text, long lastModifiedTimes
421425
try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file), UTF_8)) {
422426
writer.write(text);
423427
file.setLastModified(convertTimestampFromSecondsToMs(lastModifiedTimestampSeconds));
428+
} catch (OutOfMemoryError e) {
429+
Logger.getLogger()
430+
.w("Write text file out of memory.", e);
431+
throw new IOException("out of memory");
424432
}
425433
}
426434

@@ -434,6 +442,10 @@ private static String readTextFile(@NonNull File file) throws IOException {
434442
bos.write(readBuffer, 0, read);
435443
}
436444
return new String(bos.toByteArray(), UTF_8);
445+
} catch (OutOfMemoryError e) {
446+
Logger.getLogger()
447+
.w("Read text file out of memory.", e);
448+
throw new IOException("out of memory");
437449
}
438450
}
439451

0 commit comments

Comments
 (0)