forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
lib_util_mac.mm
34 lines (26 loc) · 1.24 KB
/
lib_util_mac.mm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/updater/lib_util.h"
#import <Cocoa/Cocoa.h>
#include "base/strings/sys_string_conversions.h"
namespace updater {
std::string UnescapeURLComponent(base::StringPiece escaped_text_piece) {
@autoreleasepool {
NSString* escaped_text = base::SysUTF8ToNSString(escaped_text_piece);
// Escape stray percent signs not followed by a hex byte to match the //net
// and Windows' ::UnescapeUrlA behavior of ignoring invalid percent codes.
NSRegularExpression* regex = [NSRegularExpression
regularExpressionWithPattern:@"%(?![a-f0-9]{2})"
options:NSRegularExpressionCaseInsensitive
error:nil];
escaped_text = [regex
stringByReplacingMatchesInString:escaped_text
options:0
range:NSMakeRange(0, [escaped_text length])
withTemplate:@"%25"];
NSString* unescaped_text = [escaped_text stringByRemovingPercentEncoding];
return base::SysNSStringToUTF8(unescaped_text);
}
}
} // namespace updater