|  | # Overview | 
|  |  | 
|  | **Raw html substitution will no longer be an option for comment links.** | 
|  |  | 
|  | The raw-html option for commentlink sections is deprecated and removed. | 
|  | Example: | 
|  |  | 
|  | ``` | 
|  | [commentlink "issue b/"] | 
|  | match = (^|\\s)b/(\\d+) | 
|  | html = $1<a href=\"http://b/issue?id=$2&query=$2\" target=\"_blank\">b/$2</a> | 
|  | ``` | 
|  |  | 
|  | Before it allowed to find and replace text matches in commit messages and | 
|  | comments with arbitrary html. When misconfigured this has in the past enabled | 
|  | injecting undesired html code and XSS attacks by writing a comment. | 
|  |  | 
|  | Even though the sanitization of the resulting html has improved. This feature is | 
|  | more powerful than needed. In almost all cases across host configurations html | 
|  | is only used to either configure text of the link, or limit the link to wrap | 
|  | only a portion of the matched text. | 
|  |  | 
|  | To fill the gap in functionality from deprecating the option additional optional | 
|  | parameters (prefix, suffix and text) have been added. They allow to generate | 
|  | links that look like: | 
|  | ``` | 
|  | PREFIX<a href="LINK">TEXT</a>SUFFIX | 
|  | ``` | 
|  | With substitution being strictly plaintext and all html escaped. | 
|  |  | 
|  | The comment link section in project configs (in refs/meta/config) never | 
|  | supported the raw-html option and don't need to be updated. | 
|  |  | 
|  | # Config migration command | 
|  |  | 
|  | ``` | 
|  | CONFIG_FILE=<path to gerrit.config file> | 
|  | perl -0pe 's/([ \t]*)html\s*=\s*\"(.*)<a.* href=(?:\\\"(\S+)\\\"|(\S+)(?=\s|>))(?: .*)?>(.*)<\/a>(.*)(?<!\\)\"/$1link = \"$3$4\"\n$1prefix = \"$2\"\n$1text = \"$5\"\n$1suffix = \"$6\"/g' $CONFIG_FILE | | 
|  | perl -0pe 's/([ \t]*)html\s*=\s*(\S.*)?<a.* href=(?:\\\"(\S+)\\\"|(\S+)(?=\s|>))(?: .*)?>(.*)<\/a>(.*\S)?/$1link = \"$3$4\"\n$1prefix = \"$2\"\n$1text = \"$5\"\n$1suffix = \"$6\"/g' | | 
|  | perl -ne 'print if !/\s*(prefix|suffix|text)\s*=\s*\"\"/' | 
|  | ``` | 
|  |  | 
|  | The command does 3 simple string replace passes: | 
|  |  | 
|  | 1. Replace `html=<value>` with quote-escaped value. | 
|  | 2. Replace `html=<value>` with value without quotes. | 
|  | 3. Remove empty `prefix`, `suffix`, `text` fields. |