Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "pdf/pdfium/pdfium_page.h" | 5 #include "pdf/pdfium/pdfium_page.h" |
| 6 | 6 |
| 7 #include <math.h> | 7 #include <math.h> |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| (...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 381 void PDFiumPage::CalculateLinks() { | 381 void PDFiumPage::CalculateLinks() { |
| 382 if (calculated_links_) | 382 if (calculated_links_) |
| 383 return; | 383 return; |
| 384 | 384 |
| 385 calculated_links_ = true; | 385 calculated_links_ = true; |
| 386 FPDF_PAGELINK links = FPDFLink_LoadWebLinks(GetTextPage()); | 386 FPDF_PAGELINK links = FPDFLink_LoadWebLinks(GetTextPage()); |
| 387 int count = FPDFLink_CountWebLinks(links); | 387 int count = FPDFLink_CountWebLinks(links); |
| 388 for (int i = 0; i < count; ++i) { | 388 for (int i = 0; i < count; ++i) { |
| 389 base::string16 url; | 389 base::string16 url; |
| 390 int url_length = FPDFLink_GetURL(links, i, NULL, 0); | 390 int url_length = FPDFLink_GetURL(links, i, NULL, 0); |
| 391 if (url_length > 0) { | 391 if (url_length > 0) { |
|
Lei Zhang
2014/06/05 22:26:21
This needs to be url_length > 1 because WriteInto(
jam
2014/06/06 01:17:51
actually, i looked more and the bug is in pdfium.
jam
2014/06/06 03:19:04
Done.
| |
| 392 unsigned short* data = | 392 unsigned short* data = |
| 393 reinterpret_cast<unsigned short*>(WriteInto(&url, url_length + 1)); | 393 reinterpret_cast<unsigned short*>(WriteInto(&url, url_length)); |
| 394 FPDFLink_GetURL(links, i, data, url_length); | 394 FPDFLink_GetURL(links, i, data, url_length); |
| 395 } | 395 } |
| 396 Link link; | 396 Link link; |
| 397 link.url = base::UTF16ToUTF8(url); | 397 link.url = base::UTF16ToUTF8(url); |
| 398 | 398 |
| 399 // If the link cannot be converted to a pp::Var, then it is not possible to | 399 // If the link cannot be converted to a pp::Var, then it is not possible to |
| 400 // pass it to JS. In this case, ignore the link like other PDF viewers. | 400 // pass it to JS. In this case, ignore the link like other PDF viewers. |
| 401 // See http://crbug.com/312882 for an example. | 401 // See http://crbug.com/312882 for an example. |
| 402 pp::Var link_var(link.url); | 402 pp::Var link_var(link.url); |
| 403 if (!link_var.is_string()) | 403 if (!link_var.is_string()) |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 469 new_left, new_top, new_right - new_left + 1, new_bottom - new_top + 1); | 469 new_left, new_top, new_right - new_left + 1, new_bottom - new_top + 1); |
| 470 } | 470 } |
| 471 | 471 |
| 472 PDFiumPage::Link::Link() { | 472 PDFiumPage::Link::Link() { |
| 473 } | 473 } |
| 474 | 474 |
| 475 PDFiumPage::Link::~Link() { | 475 PDFiumPage::Link::~Link() { |
| 476 } | 476 } |
| 477 | 477 |
| 478 } // namespace chrome_pdf | 478 } // namespace chrome_pdf |
| OLD | NEW |