# Security Points

## Infinite Recursivity

In ufLang to safeguard against infinite recursion, the maximum recursion depth is set to **1 million**. This limit ensures that programs using recursion do not inadvertently exhaust system resources, such as stack space, which could lead to instability or crashes.

**Why a Limit is Necessary**

Recursive function calls rely on the call stack to keep track of intermediate states. Without a limit, programs with improperly defined base cases or logic errors could cause infinite recursion, resulting in stack overflow errors or unresponsive behavior.

**Design Choice**

The limit of **1 million** was chosen to:

* Provide a high enough threshold for complex, deeply recursive computations.
* Avoid excessive strain on memory resources.
* Maintain predictable and stable runtime behavior.

**Behavior When Limit is Reached**

When a recursive function exceeds the maximum depth:

* The runtime will immediately terminate the recursion.
* An error will be thrown

## Binary Obfuscation

The compiled binaries in ufLang are obfuscated to enhance security and protect against reverse engineering and tampering.

**Impact**:\
Obfuscation makes the binary harder to analyze while maintaining minimal runtime performance impact. However, it may slightly increase the file size and compilation time.

**Limitations**:\
While obfuscation deters casual analysis, it is not entirely foolproof. Skilled attackers may still de-obfuscate the binary using advanced techniques.

## Safe Handling of Function Return Values (`nil`)

In ufLang, every function is guaranteed to return a value. If no explicit return value is provided, the default value `nil` is returned automatically.

This mechanism enhances safety by:

1. Preventing runtime errors caused by missing return values.
2. Ensuring consistent execution flow and predictable behavior.
3. Simplifying static code analysis.

## Automatically managed memory

In ufLang, memory management is designed to prioritize security by handling all memory operations automatically, therefore eliminating the need for direct user intervention. This approach prevents memory leaks, buffer overflows, and other vulnerabilities that arise from manual memory allocation and deallocation. By abstracting these complexities, ufLang ensures that developers can focus more on core application logic rather than on low-level memory management details.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://glados-6.gitbook.io/glados-uflang/introduction/security-points.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
