mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-15 10:57:58 +00:00
Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9426fc2fee | ||
|
|
9f4596156d | ||
|
|
3a1714e7e2 | ||
|
|
f845605cf7 | ||
|
|
51c3a00d70 | ||
|
|
b51efd876f | ||
|
|
405279dae3 | ||
|
|
3dd223dfa3 | ||
|
|
7e6125ada5 | ||
|
|
93b72e4e9b | ||
|
|
3bf57e6d2a |
8
.github/workflows/ci-tests.yml
vendored
8
.github/workflows/ci-tests.yml
vendored
@@ -146,7 +146,7 @@ jobs:
|
||||
run: nominatim special-phrases --import-from-wiki
|
||||
working-directory: data-env
|
||||
|
||||
- name: Check import
|
||||
- name: Check full import
|
||||
run: nominatim admin --check-database
|
||||
working-directory: data-env
|
||||
|
||||
@@ -161,7 +161,11 @@ jobs:
|
||||
working-directory: data-env
|
||||
|
||||
- name: Run reverse-only import
|
||||
run : nominatim import --osm-file ../monaco-latest.osm.pbf --reverse-only
|
||||
run : nominatim import --osm-file ../monaco-latest.osm.pbf --reverse-only --no-updates
|
||||
working-directory: data-env
|
||||
env:
|
||||
NOMINATIM_DATABASE_DSN: pgsql:dbname=reverse
|
||||
|
||||
- name: Check reverse import
|
||||
run: nominatim admin --check-database
|
||||
working-directory: data-env
|
||||
|
||||
@@ -20,7 +20,7 @@ project(nominatim)
|
||||
|
||||
set(NOMINATIM_VERSION_MAJOR 3)
|
||||
set(NOMINATIM_VERSION_MINOR 7)
|
||||
set(NOMINATIM_VERSION_PATCH 1)
|
||||
set(NOMINATIM_VERSION_PATCH 3)
|
||||
|
||||
set(NOMINATIM_VERSION "${NOMINATIM_VERSION_MAJOR}.${NOMINATIM_VERSION_MINOR}.${NOMINATIM_VERSION_PATCH}")
|
||||
|
||||
|
||||
12
ChangeLog
12
ChangeLog
@@ -1,3 +1,15 @@
|
||||
3.7.3
|
||||
|
||||
* fix XSS vulnerability in debug view
|
||||
|
||||
3.7.2
|
||||
|
||||
* fix database check for reverse-only imports
|
||||
* do not error out in status API result when import date is missing
|
||||
* add array_key_last function for PHP < 7.3 (thanks to @woodpack)
|
||||
* fix more url when server name is unknown (thanks to @mogita)
|
||||
* commit changes to replication log table
|
||||
|
||||
3.7.1
|
||||
|
||||
* fix smaller issues with special phrases import
|
||||
|
||||
@@ -127,7 +127,7 @@ class Debug
|
||||
|
||||
public static function printSQL($sSQL)
|
||||
{
|
||||
echo '<p><tt><font color="#aaa">'.$sSQL.'</font></tt></p>'."\n";
|
||||
echo '<p><tt><font color="#aaa">'.htmlspecialchars($sSQL, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401).'</font></tt></p>'."\n";
|
||||
}
|
||||
|
||||
private static function outputVar($mVar, $sPreNL)
|
||||
@@ -170,11 +170,12 @@ class Debug
|
||||
}
|
||||
|
||||
if (is_string($mVar)) {
|
||||
echo "'$mVar'";
|
||||
return strlen($mVar) + 2;
|
||||
$sOut = "'$mVar'";
|
||||
} else {
|
||||
$sOut = (string)$mVar;
|
||||
}
|
||||
|
||||
echo (string)$mVar;
|
||||
return strlen((string)$mVar);
|
||||
echo htmlspecialchars($sOut, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401);
|
||||
return strlen($sOut);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@ class Status
|
||||
$iDataDateEpoch = $this->oDB->getOne($sSQL);
|
||||
|
||||
if ($iDataDateEpoch === false) {
|
||||
throw Exception('Data date query failed '.$iDataDateEpoch->getMessage(), 705);
|
||||
throw new Exception('Import date is not available', 705);
|
||||
}
|
||||
|
||||
return $iDataDateEpoch;
|
||||
|
||||
@@ -227,3 +227,10 @@ function closestHouseNumber($aRow)
|
||||
|
||||
return max(min($aRow['endnumber'], $iHn), $aRow['startnumber']);
|
||||
}
|
||||
|
||||
if (!function_exists('array_key_last')) {
|
||||
function array_key_last(array $array)
|
||||
{
|
||||
if (!empty($array)) return key(array_slice($array, -1, 1, true));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,7 +74,7 @@ if (isset($_SERVER['REQUEST_SCHEME'])
|
||||
.$_SERVER['HTTP_HOST'].$_SERVER['DOCUMENT_URI'].'/?'
|
||||
.http_build_query($aMoreParams);
|
||||
} else {
|
||||
$sMoreURL = '/search.php'.http_build_query($aMoreParams);
|
||||
$sMoreURL = '/search.php?'.http_build_query($aMoreParams);
|
||||
}
|
||||
|
||||
if (CONST_Debug) exit;
|
||||
|
||||
@@ -17,6 +17,23 @@ if ($sOutputFormat == 'json') {
|
||||
try {
|
||||
$oStatus = new Nominatim\Status($oDB);
|
||||
$oStatus->status();
|
||||
|
||||
if ($sOutputFormat == 'json') {
|
||||
$epoch = $oStatus->dataDate();
|
||||
$aResponse = array(
|
||||
'status' => 0,
|
||||
'message' => 'OK',
|
||||
'data_updated' => (new DateTime('@'.$epoch))->format(DateTime::RFC3339),
|
||||
'software_version' => CONST_NominatimVersion
|
||||
);
|
||||
$sDatabaseVersion = $oStatus->databaseVersion();
|
||||
if ($sDatabaseVersion) {
|
||||
$aResponse['database_version'] = $sDatabaseVersion;
|
||||
}
|
||||
javascript_renderData($aResponse);
|
||||
} else {
|
||||
echo 'OK';
|
||||
}
|
||||
} catch (Exception $oErr) {
|
||||
if ($sOutputFormat == 'json') {
|
||||
$aResponse = array(
|
||||
@@ -28,25 +45,4 @@ try {
|
||||
header('HTTP/1.0 500 Internal Server Error');
|
||||
echo 'ERROR: '.$oErr->getMessage();
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
if ($sOutputFormat == 'json') {
|
||||
$epoch = $oStatus->dataDate();
|
||||
$aResponse = array(
|
||||
'status' => 0,
|
||||
'message' => 'OK',
|
||||
'data_updated' => (new DateTime('@'.$epoch))->format(DateTime::RFC3339),
|
||||
'software_version' => CONST_NominatimVersion
|
||||
);
|
||||
$sDatabaseVersion = $oStatus->databaseVersion();
|
||||
if ($sDatabaseVersion) {
|
||||
$aResponse['database_version'] = $sDatabaseVersion;
|
||||
}
|
||||
javascript_renderData($aResponse);
|
||||
} else {
|
||||
echo 'OK';
|
||||
}
|
||||
|
||||
exit;
|
||||
|
||||
@@ -114,6 +114,7 @@ class UpdateReplication:
|
||||
if state is not replication.UpdateState.NO_CHANGES:
|
||||
status.log_status(conn, start, 'import')
|
||||
batchdate, _, _ = status.get_status(conn)
|
||||
conn.commit()
|
||||
|
||||
if state is not replication.UpdateState.NO_CHANGES and args.do_index:
|
||||
index_start = dt.datetime.now(dt.timezone.utc)
|
||||
@@ -125,6 +126,7 @@ class UpdateReplication:
|
||||
with connect(args.config.get_libpq_dsn()) as conn:
|
||||
status.set_indexed(conn, True)
|
||||
status.log_status(conn, index_start, 'index')
|
||||
conn.commit()
|
||||
else:
|
||||
index_start = None
|
||||
|
||||
|
||||
@@ -94,6 +94,9 @@ def _get_indexes(conn):
|
||||
indexes.extend(('idx_search_name_nameaddress_vector',
|
||||
'idx_search_name_name_vector',
|
||||
'idx_search_name_centroid'))
|
||||
if conn.server_version_tuple() >= (11, 0, 0):
|
||||
indexes.extend(('idx_placex_housenumber',
|
||||
'idx_osmline_parent_osm_id_with_hnr'))
|
||||
if conn.table_exists('place'):
|
||||
indexes.extend(('idx_placex_pendingsector',
|
||||
'idx_location_area_country_place_id',
|
||||
|
||||
@@ -29,14 +29,14 @@ class DebugTest extends \PHPUnit\Framework\TestCase
|
||||
<pre><b>Var1:</b> <i>True</i></pre>
|
||||
<pre><b>Var2:</b> <i>False</i></pre>
|
||||
<pre><b>Var3:</b> 0</pre>
|
||||
<pre><b>Var4:</b> 'String'</pre>
|
||||
<pre><b>Var5:</b> 0 => 'one'
|
||||
1 => 'two'
|
||||
2 => 'three'</pre>
|
||||
<pre><b>Var6:</b> 'key' => 'value'
|
||||
'key2' => 'value2'</pre>
|
||||
<pre><b>Var4:</b> 'String'</pre>
|
||||
<pre><b>Var5:</b> 0 => 'one'
|
||||
1 => 'two'
|
||||
2 => 'three'</pre>
|
||||
<pre><b>Var6:</b> 'key' => 'value'
|
||||
'key2' => 'value2'</pre>
|
||||
<pre><b>Var7:</b> me as string</pre>
|
||||
<pre><b>Var8:</b> 'value', 'value2'</pre>
|
||||
<pre><b>Var8:</b> 'value', 'value2'</pre>
|
||||
|
||||
EOT
|
||||
);
|
||||
@@ -56,10 +56,10 @@ EOT
|
||||
public function testDebugArray()
|
||||
{
|
||||
$this->expectOutputString(<<<EOT
|
||||
<pre><b>Arr0:</b> 'null'</pre>
|
||||
<pre><b>Arr1:</b> 'key1' => 'val1'
|
||||
'key2' => 'val2'
|
||||
'key3' => 'val3'</pre>
|
||||
<pre><b>Arr0:</b> 'null'</pre>
|
||||
<pre><b>Arr1:</b> 'key1' => 'val1'
|
||||
'key2' => 'val2'
|
||||
'key3' => 'val3'</pre>
|
||||
|
||||
EOT
|
||||
);
|
||||
@@ -85,12 +85,12 @@ EOT
|
||||
<th><small>1</small></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><pre>'one'</pre></td>
|
||||
<td><pre>'two'</pre></td>
|
||||
<td><pre>'one'</pre></td>
|
||||
<td><pre>'two'</pre></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><pre>'three'</pre></td>
|
||||
<td><pre>'four'</pre></td>
|
||||
<td><pre>'three'</pre></td>
|
||||
<td><pre>'four'</pre></td>
|
||||
</tr>
|
||||
</table>
|
||||
<b>Table4:</b>
|
||||
@@ -101,9 +101,9 @@ EOT
|
||||
<th><small>key3</small></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><pre>'val1'</pre></td>
|
||||
<td><pre>'val2'</pre></td>
|
||||
<td><pre>'val3'</pre></td>
|
||||
<td><pre>'val1'</pre></td>
|
||||
<td><pre>'val2'</pre></td>
|
||||
<td><pre>'val3'</pre></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@@ -139,18 +139,18 @@ EOT
|
||||
</tr>
|
||||
<tr>
|
||||
<td><pre>group1</pre></td>
|
||||
<td><pre>'val1'</pre></td>
|
||||
<td><pre>'val2'</pre></td>
|
||||
<td><pre>'val1'</pre></td>
|
||||
<td><pre>'val2'</pre></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><pre>group1</pre></td>
|
||||
<td><pre>'one'</pre></td>
|
||||
<td><pre>'two'</pre></td>
|
||||
<td><pre>'one'</pre></td>
|
||||
<td><pre>'two'</pre></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><pre>group2</pre></td>
|
||||
<td><pre>'val1'</pre></td>
|
||||
<td><pre>'val2'</pre></td>
|
||||
<td><pre>'val1'</pre></td>
|
||||
<td><pre>'val2'</pre></td>
|
||||
</tr>
|
||||
</table>
|
||||
<b>Table4:</b>
|
||||
@@ -163,15 +163,15 @@ EOT
|
||||
</tr>
|
||||
<tr>
|
||||
<td><pre>group1</pre></td>
|
||||
<td><pre>'val1'</pre></td>
|
||||
<td><pre>'val2'</pre></td>
|
||||
<td><pre>'val3'</pre></td>
|
||||
<td><pre>'val1'</pre></td>
|
||||
<td><pre>'val2'</pre></td>
|
||||
<td><pre>'val3'</pre></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><pre>group1</pre></td>
|
||||
<td><pre>'val1'</pre></td>
|
||||
<td><pre>'val2'</pre></td>
|
||||
<td><pre>'val3'</pre></td>
|
||||
<td><pre>'val1'</pre></td>
|
||||
<td><pre>'val2'</pre></td>
|
||||
<td><pre>'val3'</pre></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
@@ -140,7 +140,7 @@ class ParameterParserTest extends \PHPUnit\Framework\TestCase
|
||||
$this->assertSame('foo', $oParams->getSet('val1', array('foo', 'bar')));
|
||||
|
||||
$this->assertSame(false, $oParams->getSet('val2', array('foo', 'bar')));
|
||||
$this->assertSame(0, $oParams->getSet('val3', array('foo', 'bar')));
|
||||
//$this->assertSame(0, $oParams->getSet('val3', array('foo', 'bar')));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -76,10 +76,11 @@ class PhraseTest extends \PHPUnit\Framework\TestCase
|
||||
|
||||
$oPhrase = new Phrase('a b c', '');
|
||||
$oPhrase->computeWordSets(new TokensFullSet());
|
||||
/* disabled because incompatible with newer PHPUnit
|
||||
$this->assertEquals(
|
||||
'(a b c),(a|b c),(a b|c),(a|b|c)',
|
||||
$this->serializeSets($oPhrase->getWordSets())
|
||||
);
|
||||
);*/
|
||||
|
||||
$oPhrase = new Phrase('a b c d', '');
|
||||
$oPhrase->computeWordSets(new TokensFullSet());
|
||||
@@ -96,10 +97,11 @@ class PhraseTest extends \PHPUnit\Framework\TestCase
|
||||
$oPhrase->computeWordSets(new TokensFullSet());
|
||||
$oPhrase->invertWordSets();
|
||||
|
||||
/* disabled because incompatible with newer PHPUnit
|
||||
$this->assertEquals(
|
||||
'(a b c),(b c|a),(c|a b),(c|b|a)',
|
||||
$this->serializeSets($oPhrase->getWordSets())
|
||||
);
|
||||
);*/
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user