Files
httrack/html/server/error.html
Xavier Roche 01274a93f5 The WebHTTrack pages hardcode a copyright year the doc pages now compute (#1217)
* Expand the WebHTTrack footer year instead of hardcoding it (#1165)

The 23 pages under html/server/ carried 1998-2026 as literal markup, which
doc-chrome.py cannot reach, so from next New Year the docs and the GUI would
have disagreed with nothing to catch it.

htsserver already resolves a ${prefix:name} family in the templates it serves,
so the year becomes one more of those. Computed per request, it cannot drift,
and no regeneration or check has to watch it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>

* Classify the date: token in the template escaping audit (#1165)

185 requires every ${...} in the server templates to carry the escaping prefix
its position needs, and a bare key in element body is a finding. The year the
server computes is not runtime data and cannot carry markup, so it joins the
translations and build-time constants instead.

Paired both ways: a settings value in element body must still be a finding, or
the exemption is a hole rather than a classification.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>

* Fall back to the clock on an unusable SOURCE_DATE_EPOCH, and harden the test

A garbage or over-range override reached time zero, so the footer rendered
1998-1970 rather than ignoring the value. The parse now has to consume the whole
string, and a value gmtime rejects falls back to the real clock.

The test grew what the review found missing: the tree-wide sweep that a single
converted page cannot satisfy, a pinned epoch an hour before New Year UTC read
from 14 hours east of it, so gmtime and localtime give different years, and the
two unusable overrides. Renumbered off 286, which master took meanwhile.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>

* Refuse a SOURCE_DATE_EPOCH whose year no footer can show

glibc's gmtime accepts the whole int range of tm_year, so a parsable
SOURCE_DATE_EPOCH could reach the footer as "-2" or overflow the
tm_year + 1900 add. Both break the digits-only promise test 185's
date: exemption rests on.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>

---------

Signed-off-by: Xavier Roche <roche@httrack.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-12 11:33:33 +00:00

84 lines
2.0 KiB
HTML

<html xmlns="http://www.w3.org/1999/xhtml" lang="${attr:LANGUAGE_ISO}">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=${attr:LANGUAGE_CHARSET}" />
<meta name="description" content="${attr:LANG_METADESC}" />
<meta name="keywords" content="${attr:LANG_METAKEYW}" />
<title>'${html:projname}' - HTTrack Website Copier</title>
<link rel="stylesheet" type="text/css" media="screen" href="style.css">
<script type="text/javascript" src="ping.js" defer></script>
<script language="javascript">
<!--
function do_load() {
window.status=' ';
}
function do_unload() {
}
function info(str) {
window.status = str;
}
// -->
</script>
</head>
<body onLoad="do_load();" onUnload="do_unload();">
<table width="76%" border="0" align="center" cellspacing="0" cellpadding="0" class="tableWidth">
<tr>
<td><img src="images/wordmark.svg" width="400" height="36" alt="HTTrack Website Copier" title="" border="0" id="title" /></td>
</tr>
</table>
<table width="76%" border="0" align="center" cellspacing="0" cellpadding="3" class="tableWidth">
<tr>
<td id="subTitle">${LANG_OSFWB}</td>
</tr>
</table>
<table width="76%" border="0" align="center" cellspacing="0" cellpadding="0" class="tableWidth">
<tr class="blak">
<td>
<table width="100%" border="0" align="center" cellspacing="1" cellpadding="0">
<tr>
<td colspan="6">
<table width="100%" border="0" align="center" cellspacing="0" cellpadding="10">
<tr>
<td id="pageContent">
<!-- ==================== End prologue ==================== -->
<h2>
${LANG_FATALERR}:
</h2>
<br>
<tt>
${html:error}
</tt>
<br>
<a href="javascript:window.close();">${LANG_CANCLSWND}.</a>
<!-- ==================== Start epilogue ==================== -->
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
<table width="76%" border="0" align="center" valign="bottom" cellspacing="0" cellpadding="0">
<tr>
<td id="footer"><small><small>&copy; 1998-${date:year} Xavier Roche &amp; other contributors - Web Design: Leto Kauler.</small></small></td>
</tr>
</table>
</body>
</html>