Movatterモバイル変換


[0]ホーム

URL:


Google Git
Sign in
chromium /chromium /src /refs/heads/main /. /base /base64url_fuzzer.cc
blob: 64ca03bb359de86150c47c7374f14371a8dd4c1b [file] [log] [blame] [edit]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include"base/base64url.h"
#include<fuzzer/FuzzedDataProvider.h>
#include<stdint.h>
#include<string>
#include<tuple>
#include"base/check.h"
#include"base/check_op.h"
namespace base{
extern"C"intLLVMFuzzerTestOneInput(constuint8_t* data,size_t size){
FuzzedDataProvider provider(data, size);
// Test encoding of a random plaintext.
std::string plaintext= provider.ConsumeRandomLengthString();
Base64UrlEncodePolicy encode_policy=
provider.ConsumeBool()?Base64UrlEncodePolicy::INCLUDE_PADDING
:Base64UrlEncodePolicy::OMIT_PADDING;
std::string encoded;
Base64UrlEncode(plaintext, encode_policy,&encoded);
// Check decoding of the above gives the original text.
std::string decoded;
CHECK(Base64UrlDecode(encoded,
encode_policy==Base64UrlEncodePolicy::INCLUDE_PADDING
?Base64UrlDecodePolicy::REQUIRE_PADDING
:Base64UrlDecodePolicy::DISALLOW_PADDING,
&decoded));
CHECK_EQ(decoded, plaintext);
// Same result should be when ignoring padding.
decoded.clear();
CHECK(Base64UrlDecode(encoded,Base64UrlDecodePolicy::IGNORE_PADDING,
&decoded));
CHECK_EQ(decoded, plaintext);
// Additionally test decoding of a random input.
std::string decoding_input= provider.ConsumeRandomLengthString();
Base64UrlDecodePolicy decode_policy;
switch(provider.ConsumeIntegralInRange<int>(0,2)){
case0:
decode_policy=Base64UrlDecodePolicy::REQUIRE_PADDING;
break;
case1:
decode_policy=Base64UrlDecodePolicy::IGNORE_PADDING;
break;
case2:
decode_policy=Base64UrlDecodePolicy::DISALLOW_PADDING;
break;
}
std::ignore=Base64UrlDecode(decoding_input, decode_policy,&decoded);
return0;
}
}// namespace base

[8]ページ先頭

©2009-2025 Movatter.jp