| // 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 "printing/client_info_helpers.h" |
| |
| #include "base/no_destructor.h" |
| #include "base/types/optional_util.h" |
| #include "printing/mojom/print.mojom.h" |
| #include "third_party/re2/src/re2/re2.h" |
| |
| namespace printing { |
| |
| namespace { |
| |
| bool ValidateClientType(mojom::IppClientInfo::ClientType type) { |
| return type >= mojom::IppClientInfo::ClientType::kMinValue && |
| type <= mojom::IppClientInfo::ClientType::kMaxValue; |
| } |
| |
| bool ValidateStringMember(const std::string* value, size_t max_length) { |
| static const base::NoDestructor<RE2> kStringRegex("[a-zA-Z0-9_.-]*"); |
| return value == nullptr || |
| (value->size() <= max_length && RE2::FullMatch(*value, *kStringRegex)); |
| } |
| |
| } // namespace |
| |
| bool ValidateClientInfoItem(const mojom::IppClientInfo& client_info) { |
| return ValidateClientType(client_info.client_type) && |
| ValidateStringMember(&client_info.client_name, |
| kClientInfoMaxNameLength) && |
| ValidateStringMember(&client_info.client_string_version, |
| kClientInfoMaxStringVersionLength) && |
| ValidateStringMember(base::OptionalToPtr(client_info.client_patches), |
| kClientInfoMaxPatchesLength) && |
| ValidateStringMember(base::OptionalToPtr(client_info.client_version), |
| kClientInfoMaxVersionLength); |
| } |
| |
| } // namespace printing |