From 185f8868c5b5d528e7280abf7e99bf3abd6bd3f8 Mon Sep 17 00:00:00 2001 From: Rockford Wei Date: Fri, 17 Jul 2020 10:31:31 -0400 Subject: [PATCH] fixing a dangling pointer --- Sources/PerfectHTTP/MimeReader.swift | 33 +++++++++++++++------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/Sources/PerfectHTTP/MimeReader.swift b/Sources/PerfectHTTP/MimeReader.swift index 78a8cad..ad4c951 100644 --- a/Sources/PerfectHTTP/MimeReader.swift +++ b/Sources/PerfectHTTP/MimeReader.swift @@ -359,26 +359,29 @@ public final class MimeReader { } // write as much data as we reasonably can var writeEnd = position - let qPtr = UnsafePointer(byts) - while writeEnd < end { - - if qPtr[writeEnd] == mime_cr { - if end - writeEnd < 2 { - break - } - if qPtr[writeEnd + 1] == mime_lf { - if isBoundaryStart(bytes: byts, start: writeEnd + 2) { - break - } else if end - writeEnd - 2 < self.boundary.count { - // we are at the eol, but check to see if the next line may be starting a boundary - if end - writeEnd < 4 || (qPtr[writeEnd + 2] == mime_dash && qPtr[writeEnd + 3] == mime_dash) { + byts.withUnsafeBufferPointer { buffered in + if let qPtr = buffered.baseAddress { + while writeEnd < end { + + if qPtr[writeEnd] == mime_cr { + if end - writeEnd < 2 { break } + if qPtr[writeEnd + 1] == mime_lf { + if isBoundaryStart(bytes: byts, start: writeEnd + 2) { + break + } else if end - writeEnd - 2 < self.boundary.count { + // we are at the eol, but check to see if the next line may be starting a boundary + if end - writeEnd < 4 || (qPtr[writeEnd + 2] == mime_dash && qPtr[writeEnd + 3] == mime_dash) { + break + } + } + } } + + writeEnd += 1 } } - - writeEnd += 1 } do { let length = writeEnd - position