diff --git a/src/kits/storage/sniffer/Pattern.cpp b/src/kits/storage/sniffer/Pattern.cpp index bbc8a80121..a77af1e283 100644 --- a/src/kits/storage/sniffer/Pattern.cpp +++ b/src/kits/storage/sniffer/Pattern.cpp @@ -13,6 +13,8 @@ #include // for SEEK_* defines #include +#include + using namespace BPrivate::Storage::Sniffer; Pattern::Pattern(const std::string &string, const std::string &mask) @@ -115,6 +117,7 @@ Pattern::Sniff(off_t start, off_t size, BPositionIO *data, bool caseInsensitive) off_t len = fString.length(); char *buffer = new(nothrow) char[len+1]; if (buffer) { + ArrayDeleter _(buffer); ssize_t bytesRead = data->ReadAt(start, buffer, len); // \todo If there are fewer bytes left in the data stream // from the given position than the length of our data @@ -160,6 +163,7 @@ Pattern::Sniff(off_t start, off_t size, BPositionIO *data, bool caseInsensitive) off_t len = fString.length(); char *buffer = new(std::nothrow) char[len+1]; if (buffer) { + ArrayDeleter _(buffer); ssize_t bytesRead = data->ReadAt(start, buffer, len); // \todo If there are fewer bytes left in the data stream // from the given position than the length of our data diff --git a/src/servers/registrar/mime/SnifferRules.cpp b/src/servers/registrar/mime/SnifferRules.cpp index fac96ec377..3183dd94d2 100644 --- a/src/servers/registrar/mime/SnifferRules.cpp +++ b/src/servers/registrar/mime/SnifferRules.cpp @@ -163,14 +163,15 @@ SnifferRules::GuessMimeType(const entry_ref *ref, BString *type) if (bytes < 0) err = bytes; } - + // Next read that many bytes (or fewer, if the file isn't // that long) into a buffer if (!err) { buffer = new(std::nothrow) char[bytes]; if (!buffer) err = B_NO_MEMORY; - } + } + if (!err) err = file.SetTo(ref, B_READ_ONLY); if (!err) { @@ -182,7 +183,9 @@ SnifferRules::GuessMimeType(const entry_ref *ref, BString *type) // Now sniff the buffer if (!err) err = GuessMimeType(&file, buffer, bytes, type); - + + delete[] buffer; + return err; }