mirror of
https://github.com/luanti-org/luanti.git
synced 2025-09-30 19:22:14 +00:00
Add missing chunk size safety checks (#16502)
This commit is contained in:
parent
d5ddee6cbf
commit
4c29bf6923
2 changed files with 16 additions and 0 deletions
|
@ -43,6 +43,18 @@ const FlagDesc flagdesc_mapgen_v6[] = {
|
||||||
MapgenV6::MapgenV6(MapgenV6Params *params, EmergeParams *emerge)
|
MapgenV6::MapgenV6(MapgenV6Params *params, EmergeParams *emerge)
|
||||||
: Mapgen(MAPGEN_V6, params, emerge)
|
: Mapgen(MAPGEN_V6, params, emerge)
|
||||||
{
|
{
|
||||||
|
if (csize.X != csize.Y || csize.Y != csize.Z) {
|
||||||
|
// In practice:
|
||||||
|
// (5,2,1) segfaults in mudflow
|
||||||
|
// (5,2,5) generates very broken terrain
|
||||||
|
throw BaseException("MapgenV6: chunk size must be cubic");
|
||||||
|
}
|
||||||
|
if (csize.Y % 2 == 0) {
|
||||||
|
// weird ledges appear in some places
|
||||||
|
warningstream << "MapgenV6: chunk heights divisible by two are known "
|
||||||
|
"to be buggy." << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
ystride = csize.X;
|
ystride = csize.X;
|
||||||
|
|
||||||
heightmap = new s16[csize.X * csize.Z];
|
heightmap = new s16[csize.X * csize.Z];
|
||||||
|
|
|
@ -132,6 +132,10 @@ void Decoration::placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax)
|
||||||
|
|
||||||
PcgRandom ps(blockseed + 53);
|
PcgRandom ps(blockseed + 53);
|
||||||
int carea_size = nmax.X - nmin.X + 1;
|
int carea_size = nmax.X - nmin.X + 1;
|
||||||
|
if (nmax.Z - nmin.Z + 1 != carea_size) {
|
||||||
|
// TODO: this is a stupid restriction, which we should lift
|
||||||
|
throw BaseException("Decoration::placeDeco requires a square area (XZ)");
|
||||||
|
}
|
||||||
|
|
||||||
// Divide area into parts
|
// Divide area into parts
|
||||||
// If chunksize is changed it may no longer be divisable by sidelen
|
// If chunksize is changed it may no longer be divisable by sidelen
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue