Skip to content

Commit e590d71

Browse files
authored
Allow invalid xml (#560)
* Get NULL xml_parsed_content for invalid xml * Check NULL xml_parsed_content * Add test case * Update NEWS.md
1 parent c8418f9 commit e590d71

File tree

6 files changed

+10
-5
lines changed

6 files changed

+10
-5
lines changed

NEWS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
* `seq_linter()`'s lint message is clearer about the reason for linting. (#522, @michaelchirico)
1010
* New `missing_package_linter()` (#536, #547, @renkun-ken)
1111
* New `namespace_linter()` (#548, #551, @renkun-ken)
12+
* Fix possible error on invalid XML produced by xmlparsedata (#559, #560, @renkun-ken)
1213

1314
# lintr 2.0.1
1415

R/get_source_expressions.R

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ get_source_expressions <- function(filename) {
9494
file_lines = source_file$lines,
9595
content = source_file$lines,
9696
full_parsed_content = parsed_content,
97-
xml_parsed_content = if (!is.null(parsed_content)) xml2::read_xml(xmlparsedata::xml_parse_data(parsed_content))
97+
xml_parsed_content = if (!is.null(parsed_content)) tryCatch(xml2::read_xml(xmlparsedata::xml_parse_data(parsed_content)), error = function(e) NULL)
9898
)
9999

100100
list(expressions = expressions, error = e, lines = source_file$lines)
@@ -119,7 +119,7 @@ get_single_source_expression <- function(loc,
119119
column = parsed_content[loc, "col1"],
120120
lines = expr_lines,
121121
parsed_content = pc,
122-
xml_parsed_content = xml2::read_xml(xmlparsedata::xml_parse_data(pc)),
122+
xml_parsed_content = tryCatch(xml2::read_xml(xmlparsedata::xml_parse_data(pc)), error = function(e) NULL),
123123
content = content,
124124
find_line = find_line_fun(content),
125125
find_column = find_column_fun(content)

R/missing_package_linter.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#' @export
44
missing_package_linter <- function(source_file) {
55

6-
if (!length(source_file$parsed_content)) return(list())
6+
if (!length(source_file$parsed_content) || is.null(source_file$xml_parsed_content)) return(list())
77

88
xml <- source_file$xml_parsed_content
99

R/namespace_linter.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#' @export
99
namespace_linter <- function(check_exports = TRUE, check_nonexports = TRUE) {
1010
function(source_file) {
11-
if (!length(source_file$parsed_content)) return(list())
11+
if (!length(source_file$parsed_content) || is.null(source_file$xml_parsed_content)) return(list())
1212

1313
xml <- source_file$xml_parsed_content
1414

R/seq_linter.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#' @export
77
seq_linter <- function(source_file) {
88

9-
if (!length(source_file$parsed_content)) return(list())
9+
if (!length(source_file$parsed_content) || is.null(source_file$xml_parsed_content)) return(list())
1010

1111
xml <- source_file$xml_parsed_content
1212

tests/testthat/test-error.R

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,8 @@ test_that("returns the correct linting", {
3838
NULL,
3939
equals_na_linter
4040
)
41+
42+
expect_lint("\\",
43+
rex("unexpected input")
44+
)
4145
})

0 commit comments

Comments
 (0)