refuse some chars on HG url region name

This commit is contained in:
UbitUmarov
2024-03-30 23:22:30 +00:00
parent ac49f8b8e8
commit 723a528b58
3 changed files with 25 additions and 13 deletions

View File

@@ -32,17 +32,18 @@ namespace OpenSim.Framework
{
public class RegionURI
{
private static byte[] schemaSep = osUTF8.GetASCIIBytes("://");
private static byte[] altschemaSep = osUTF8.GetASCIIBytes("|!!");
private static byte[] nameSep = osUTF8.GetASCIIBytes(":/ ");
private static byte[] altnameSep = osUTF8.GetASCIIBytes(":/ +|");
private static byte[] escapePref = osUTF8.GetASCIIBytes("+%");
private static byte[] altPortSepPref = osUTF8.GetASCIIBytes(":|");
private static readonly byte[] schemaSep = osUTF8.GetASCIIBytes("://");
private static readonly byte[] altschemaSep = osUTF8.GetASCIIBytes("|!!");
private static readonly byte[] nameSep = osUTF8.GetASCIIBytes(":/ ");
private static readonly byte[] altnameSep = osUTF8.GetASCIIBytes(":/ +|");
private static readonly byte[] escapePref = osUTF8.GetASCIIBytes("+%");
private static readonly byte[] altPortSepPref = osUTF8.GetASCIIBytes(":|");
private static readonly byte[] forbidonname = osUTF8.GetASCIIBytes(".,:;\\/");
public enum URIFlags : int
{
None = 0,
Valid = 1 << 0,
//Valid = 1 << 0,
HasHost = 1 << 1,
HasResolvedHost = 1 << 2,
HasUserName = 1 << 3,
@@ -70,7 +71,7 @@ namespace OpenSim.Framework
{
originalURI = _originalURI;
Parse(_originalURI);
if (!HasHost)
if (!HasHost && HasRegionName)
Flags |= URIFlags.IsLocalGrid;
}
@@ -81,7 +82,10 @@ namespace OpenSim.Framework
if(!HasHost)
{
Flags |= URIFlags.IsLocalGrid;
if(!HasRegionName)
Flags = URIFlags.None;
else
Flags |= URIFlags.IsLocalGrid;
return;
}
if(gi == null)
@@ -290,6 +294,12 @@ namespace OpenSim.Framework
if (tmpSlice.Length <= 0)
return;
if(tmpSlice.IndexOfAny(forbidonname) > 0)
{
Flags = URIFlags.None;
return;
}
RegionName = tmpSlice.ToString();
Flags |= URIFlags.HasRegionName;

View File

@@ -310,6 +310,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid
public GridRegion GetRegionByURI(UUID scopeID, RegionURI uri)
{
if(!uri.IsValid)
return null;
GridRegion rinfo = m_LocalGridService.GetRegionByURI(scopeID, uri);
if (rinfo != null)
{

View File

@@ -472,14 +472,14 @@ namespace OpenSim.Region.Framework.Scenes
{
if (data.Length < 8)
return null;
var minLength = ((data.Length * 3) + 3) / 4;
var bindata = ArrayPool<byte>.Shared.Rent(minLength);
int minLength = ((data.Length * 3) + 3) / 4;
byte[] bindata = ArrayPool<byte>.Shared.Rent(minLength);
try
{
if (Convert.TryFromBase64Chars(data, bindata, out int bytesWritten))
return FromBin(bindata);
}
catch
catch
{
}
finally
@@ -496,7 +496,7 @@ namespace OpenSim.Region.Framework.Scenes
using MemoryStream ms = new(m_MemoryUsed);
ToBin(ms);
return ms.ToArray();
return ms.Length > 0 ? ms.ToArray() : null;
}
public void ToBin(MemoryStream ms)