Skip to content

Instantly share code, notes, and snippets.

@artem-smotrakov
artem-smotrakov / SandboxedJEXL.java
Created February 17, 2021 12:22
Run JEXL expressions in a sandbox implemented with JexlSandbox
JexlSandbox sandbox = new JexlSandbox(false);
sandbox.white("com.safe.Functions");
JexlEngine jexl = new JexlBuilder().sandbox(sandbox).create();
JexlExpression expression = jexl.createExpression(str);
JexlContext context = new MapContext();
expression.evaluate(context);
@artem-smotrakov
artem-smotrakov / JexlInjectionExample.java
Last active March 25, 2021 06:59
An example of JEXL injection
private void handle(HttpRequest request) {
if (request.hasParameter("questionToBackend")) {
String expr = request.getParameter("questionToBackend"));
JexlEngine jexl = new JexlBuilder().create();
JexlExpression expression = jexl.createExpression(expr);
JexlContext context = new MapContext();
Object object = expression.evaluate(context);
handleResult(object);
} else {
callNextHandler(request);
@artem-smotrakov
artem-smotrakov / StartProcessWithJEXL.java
Created February 16, 2021 18:24
Start a process with JEXL
String str = "''.getClass().forName('java.lang.Runtime').getRuntime().exec('calc')";
JexlEngine jexl = new JexlBuilder().create();
JexlExpression expression = jexl.createExpression(str);
JexlContext context = new MapContext();
e.evaluate(context);
@artem-smotrakov
artem-smotrakov / main.py
Created January 5, 2021 21:01
Reading a photoresistor on ESP32 with MicroPython
from machine import ADC, Pin
import time
class LDR:
"""This class read a value from a light dependent resistor (LDR)"""
def __init__(self, pin, min_value=0, max_value=100):
"""
Initializes a new instance.
@artem-smotrakov
artem-smotrakov / MHZ19BSensor.py
Created January 1, 2021 16:58
A class for measuring CO2 with MH-Z19B sensor
# this class measures CO2 with MH-Z19B sensor
class MHZ19BSensor:
# initializes a new instance
def __init__(self, tx_pin, rx_pin, lights, co2_threshold):
self.uart = UART(1, baudrate=9600, bits=8, parity=None, stop=1, tx=int(tx_pin), rx=int(rx_pin))
self.lights = lights
self.co2_threshold = int(co2_threshold)
# measure CO2
@artem-smotrakov
artem-smotrakov / TestNPE.java
Created March 14, 2020 19:26
Helpful NullPointerException in Java 14
class A {
public B b;
}
class B {
public C[] array = new C[] { null };
}
class C {
public String string;
@artem-smotrakov
artem-smotrakov / TranslateHttpCode.java
Created March 14, 2020 15:40
An example of a switch expression in Java 14
public class TranslateHttpCode {
public static void main(String[] args) {
for (String arg : args) {
int code = Integer.valueOf(arg);
System.out.printf("%d -> %s%n", code, translate(code));
}
}
static String translate(int code) {
@artem-smotrakov
artem-smotrakov / Tribonacci.java
Created March 14, 2020 15:16
Calculating Tribonacci numbers with new switch expressions in Java 14
public class Tribonacci {
public static void main(String[] args) {
for (String arg : args) {
int n = Integer.valueOf(arg);
System.out.printf("Tribonacci(%d) = %d%n", n, tribonacci(n));
}
}
static int tribonacci(int n) {
@artem-smotrakov
artem-smotrakov / Fibonacci.java
Last active March 14, 2020 15:08
Calculating Fibonacci numbers with new switch expressions in Java 14
public class Fibonacci {
public static void main(String[] args) {
for (String arg : args) {
int n = Integer.valueOf(arg);
System.out.printf("Fibonacci(%d) = %d%n", n, fibonacci(n));
}
}
static int fibonacci(int n) {
@artem-smotrakov
artem-smotrakov / StrangeYield.java
Last active April 19, 2020 08:23
What do you think is going to happen here? Options: compilation error, runtime error, it prints "Oops", it prints "OopsOops", it prints "Forty-two".
public class StrangeYield {
public static void main(String[] args) {
go(0);
}
static void go(int n) {
System.out.println(
switch (n) {
case 42 -> "Fotry-two";