Commit e258c3f4 authored by Kalvin Lee's avatar Kalvin Lee Committed by Commit Bot

printing: don't construct StringPiece from nullptr

This change modifies several call sites in printing code to avoid
constructing base::StringPiece instances from nullptr.

Bug: 1102941
Fixes: 1102941
Test: autoninja ... chrome printing_unittests
Test: ./printing_unittests
Change-Id: If5797f6d41a03c9cfdf9eb5d40f063159a9193e3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2313978
Commit-Queue: Kalvin Lee <kdlee@chromium.org>
Reviewed-by: default avatarBailey Berro <baileyberro@chromium.org>
Reviewed-by: default avatarSean Kau <skau@chromium.org>
Cr-Commit-Position: refs/heads/master@{#791622}
parent 97070add
......@@ -87,7 +87,8 @@ ColorModel DefaultColorModel(const CupsOptionProvider& printer) {
if (!attr)
return UNKNOWN_COLOR_MODEL;
return ColorModelFromIppColor(ippGetString(attr, 0, nullptr));
const char* const value = ippGetString(attr, 0, nullptr);
return value ? ColorModelFromIppColor(value) : UNKNOWN_COLOR_MODEL;
}
std::vector<ColorModel> SupportedColorModels(
......@@ -145,10 +146,16 @@ void ExtractDuplexModes(const CupsOptionProvider& printer,
if (duplex_mode != mojom::DuplexMode::kUnknownDuplexMode)
printer_info->duplex_modes.push_back(duplex_mode);
}
ipp_attribute_t* attr = printer.GetDefaultOptionValue(kIppDuplex);
if (!attr) {
printer_info->duplex_default = mojom::DuplexMode::kUnknownDuplexMode;
return;
}
const char* const value = ippGetString(attr, 0, nullptr);
printer_info->duplex_default =
attr ? DuplexModeFromIpp(ippGetString(attr, 0, nullptr))
: mojom::DuplexMode::kUnknownDuplexMode;
value ? DuplexModeFromIpp(value) : mojom::DuplexMode::kUnknownDuplexMode;
}
void CopiesRange(const CupsOptionProvider& printer,
......@@ -241,8 +248,8 @@ bool CollateDefault(const CupsOptionProvider& printer) {
if (!attr)
return false;
base::StringPiece name = ippGetString(attr, 0, nullptr);
return name.compare(kCollated) == 0;
const char* const name = ippGetString(attr, 0, nullptr);
return name ? base::StringPiece(name).compare(kCollated) == 0 : false;
}
#if defined(OS_CHROMEOS)
......
......@@ -40,7 +40,11 @@ class MockCupsOptionProvider : public CupsOptionProvider {
std::vector<base::StringPiece> strings;
int size = ippGetCount(attr);
for (int i = 0; i < size; ++i) {
strings.emplace_back(ippGetString(attr, i, nullptr));
const char* const value = ippGetString(attr, i, nullptr);
if (!value) {
continue;
}
strings.emplace_back(value);
}
return strings;
......
......@@ -244,8 +244,10 @@ void ParseCollection(ipp_attribute_t* attr,
std::vector<std::string>* collection) {
int count = ippGetCount(attr);
for (int i = 0; i < count; i++) {
base::StringPiece value = ippGetString(attr, i, nullptr);
collection->push_back(value.as_string());
const char* const value = ippGetString(attr, i, nullptr);
if (value) {
collection->push_back(value);
}
}
}
......@@ -288,9 +290,9 @@ void ParseJobs(ipp_t* response,
CupsJob* current_job = NewJob(printer_id, jobs);
for (ipp_attribute_t* attr = starting_attr; attr != nullptr;
attr = ippNextAttribute(response)) {
base::StringPiece attribute_name = ippGetName(attr);
const char* const attribute_name = ippGetName(attr);
// Separators indicate a new job. Separators have empty names.
if (attribute_name.empty()) {
if (!attribute_name) {
current_job = NewJob(printer_id, jobs);
continue;
}
......@@ -306,7 +308,11 @@ void ParseJobs(ipp_t* response,
bool ParsePrinterInfo(ipp_t* response, PrinterInfo* printer_info) {
for (ipp_attribute_t* attr = ippFirstAttribute(response); attr != nullptr;
attr = ippNextAttribute(response)) {
base::StringPiece name = ippGetName(attr);
const char* const value = ippGetName(attr);
if (!value) {
continue;
}
base::StringPiece name(value);
if (name == base::StringPiece(kPrinterMakeAndModel)) {
DCHECK_EQ(IPP_TAG_TEXT, ippGetValueTag(attr));
const char* make_and_model_string = ippGetString(attr, 0, nullptr);
......@@ -421,8 +427,8 @@ void ParsePrinterStatus(ipp_t* response, PrinterStatus* printer_status) {
for (ipp_attribute_t* attr = ippFirstAttribute(response); attr != nullptr;
attr = ippNextAttribute(response)) {
base::StringPiece name = ippGetName(attr);
if (name.empty()) {
const char* const name = ippGetName(attr);
if (!name) {
continue;
}
......
......@@ -47,10 +47,12 @@ std::vector<base::StringPiece> CupsPrinter::GetSupportedOptionValueStrings(
if (!attr)
return values;
base::StringPiece value;
int num_options = ippGetCount(attr);
for (int i = 0; i < num_options; ++i) {
value = ippGetString(attr, i, nullptr);
const char* const value = ippGetString(attr, i, nullptr);
if (!value) {
continue;
}
values.push_back(value);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment